pyqt 主窗口和子窗口之间的数据传递

用设计师模式ui转换成得py

转换成得py基类是object,使用得时候不要再此文件修改,直接新建一个py文件,引入
ui——>py文件,然后修改基类继承,多重继承需要主窗口就主窗口类,需要子窗口对话框就对话框类
这样做得好处是当我们重复修改ui得时候,不需要修改主函数文件,只需要重载ui生成得py文件

重点

主窗口按钮绑定槽,槽里面绑定信号,信号绑定响应函数,其实槽就是响应函数,按钮函数是主动响应,信号得槽是被动触发,子窗口发送信号,pyqtSignal()来定义新的信号,新的信号作为类的属性;当我们连接了自建信号与自建槽函数,接下来就需要emit()函数去执行发射信号这个过程,我们有时候需要再去点击某个按钮发射信号。主要是通过self._signal.connect(self.getData)绑定信号用于接受,self._signal.emit(send_data)发送信号

class MainWindow(QtWidgets.QMainWindow,Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.child_ui = SubDialog()
        self.actioncanshu.triggered.connect(self.show_child_window)
    def show_child_window(self):
        self.child_ui.show()
        self.child_ui._signal.connect(self.getData)
    def getData(self, parameter):
        # print('This is a test.')
        print(parameter)
        # self.lineEdit.setText(parameter)

子窗口内容

class ChildWin(QMainWindow, Ui_Dialog):
    #定义信号
    _signal = QtCore.pyqtSignal(str)
    def __init__(self):
        super(ChildWin, self).__init__()
        self.setupUi(self)
        self.retranslateUi(self)
        self.pushButton.clicked.connect(self.slot1)

    def slot1(self):
        data_str = self.lineEdit.text()
        #发送信号
        self._signal.emit(data_str)

posted @ 2023-12-19 14:52  学不会xuebuhui  阅读(274)  评论(0编辑  收藏  举报
Language: javascript