pyqt5 main window communicates with child windows

1. Child window

from PyQt5.QtWidgets import QApplication, QWidget, QDialog, QPushButton, QLabel, QLineEdit
from PyQt5.QtCore import pyqtSignal
import sys

"""
自定义对话框
"""


class MyDialog(QDialog):
    # 自定义信号
    mySignal_first = pyqtSignal(str)
    mySignal_second = pyqtSignal(str)

    def __init__(self, parent=None):
        super(MyDialog, self).__init__(parent)
        self.edit_first = None
        self.edit_second = None
        self.initUI()

    def initUI(self):
        self.edit_first = QLineEdit(self)
        self.edit_first.move(10, 10)
        self.edit_second = QLineEdit(self)
        self.edit_second.move(10, 30)

        button_ok = QPushButton('发送', self)
        button_ok.move(10, 60)
        button_ok.clicked.connect(self.sendEditContent)

        self.setWindowTitle('MyDialog')
        self.setGeometry(300, 300, 300, 200)

    def sendEditContent(self):
        content_first = self.edit_first.text()
        content_second = self.edit_second.text()
        self.mySignal_first.emit(content_first)  # 发射信号
        self.mySignal_second.emit(content_second)  # 发射信号

2. Main window

class Window(QWidget):

    def __init__(self):
        super(Window, self).__init__()
        self.my_dialog = None
        self.initUI()

    def initUI(self):
        self.button = QPushButton('open', self)
        self.button.clicked.connect(self.openMyDialog)
        self.button.move(20, 20)

        self.label_first = QLabel("hello1", self)
        self.label_first.move(10, 50)
        self.label_second = QLabel("hello2", self)
        self.label_second.move(10, 80)

        self.setWindowTitle('Window')
        self.setGeometry(300, 300, 300, 200)
        self.show()

    def openMyDialog(self):
        # self.my_dialog = MyDialog(self)  # 将覆盖主窗口
        self.my_dialog = MyDialog()
        # 在主窗口中连接信号和槽
        self.my_dialog.mySignal_first.connect(self.getFirstDialogSignal)
        self.my_dialog.mySignal_second.connect(self.getSecondDialogSignal)  # signal second to label_second
        self.my_dialog.exec_()

    """
    实现槽函数
    """

    def getFirstDialogSignal(self, cont):
        self.label_first.setText(cont)

    def getSecondDialogSignal(self, cont):
        self.label_second.setText(cont)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = Window()
    w.show()
    print('父类窗口大小' + str(w.pos()))
    sys.exit(app.exec_())

Reference: Value transfer between different windows of PyQt5_pyqt to obtain other interface data_Tsai Shiyue's Blog-CSDN Blog

Guess you like

Origin blog.csdn.net/jizhidexiaoming/article/details/130964958