python - pyqt 两个窗口传值问题

 手机用户2502857341 发布于 2022-10-30 23:57

背景描述:
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 个回答
  • 你贴上的来的代码有几个问题
    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)

    2022-10-31 21:53 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有