背景描述:
A窗口中存在一个IP输入框lineEdit,一个提交按钮pushbutton,点击提交按钮则打开B窗口,并传递输入的ip_add地址字符串给B窗口。
B窗口代码中包含登陆数据库语句。
预期目标:
接收A窗口提交过来的ip_add变量,进行登陆数据库,打印登陆是否成功的提示。
存在问题:
目前是点击提交按钮,可以成功打开B窗口,但不知道怎么将变量值(ip_add)传递给第二个窗口。
本人是新手,请大家帮忙看看,有什么办法进行处理?
即:将下面A.py中的ip_add与B.py中的host_ip对等起来。
附:
A窗口基本处理语句:
# A.py # -*- coding: utf-8 -*- import sys from PyQt4.QtCore import * from PyQt4.QtGui import * from Ui_1 import Ui_Form import B class Form(QWidget, Ui_Form): def __init__(self, parent=None): super(Form, self).__init__(parent) self.setupUi(self) def on_pushButton_clicked(self): global ip_add self.w2=B.Dialog() ip_add=self.lineEdit.text() self.w2.show() if __name__ == "__main__": app = QApplication(sys.argv) myapp = Form() myapp.show() sys.exit(app.exec_())
B窗口基本处理语句:
# B.py # -*- coding: utf-8 -*- import sys from PyQt4.QtCore import * from PyQt4.QtGui import * from Ui_2 import Ui_Dialog import A class Dialog(QDialog, Ui_Dialog): def __init__(self, parent=None): super(Dialog, self).__init__(parent) self.setupUi(self) conn = pymssql.connect(host=host_ip, database='db_name', user='db_user', password='db_pw') .........#其他处理部分 if __name__ == "__main__": app = QApplication(sys.argv) myapp = Dialog() myapp.show() sys.exit(app.exec_())
你贴上的来的代码有几个问题
1) from Ui_1 import Ui_Form 你没贴代码,所以你的demo没法直接用
2) 你的A.py和B.py形成交叉import了,这容易形成相互依赖
3) 在A中的on_pushButton_clicked如果是self.w2=B.Dialog()这样每次点击都调用的话,则会反复的产生B.Dialog()对象,一是开销比较大,二是你无法保存上一个self.w2对象。
4) 窗口之间的传值其实是比较简单的,你有一个窗口对象的引用,则每次调用这个对象的窗口引用,然后把值传进去即可。
见例子
A.py
from PyQt4.QtGui import * from B import B class A(QWidget): def __init__(self, parent=None): super(A, self).__init__(parent) self.resize(400, 300) self.setWindowTitle("Class A") self.mIP = QLineEdit(self) self.mIP.setText("192.168.20.1") self.mIP.move(0, 0) self.mBtn = QToolButton(self) self.mBtn.setText("get IP") self.mBtn.move(100, 100) self.mBtn.clicked.connect(self.handleGetIPClick) self.mBWidget = B() def handleGetIPClick(self, *args, **kwargs): ipValue = self.mIP.text() self.c = B() print id(self.c) if ipValue: self.mBWidget.setIP(ipValue) if not self.mBWidget.isVisible(): self.mBWidget.show()
if __name__ == '__main__': import sys app = QApplication(sys.argv) a = A() a.show() app.exec_()
B.py
from PyQt4.QtGui import * class B(QDialog): def __init__(self, parent=None): super(B, self).__init__(parent) self.mIP = QLineEdit(self) self.mIP.move(0, 0) self.setWindowTitle("Class B") self.resize(200, 100) def setIP(self, ipValue): self.mIP.clear() self.mIP.setText(ipValue)