Pyside2界面窗口间通讯

88 阅读2分钟

Pyside2界面窗口间通讯

子窗口向父窗口传值

  1. 父窗口绑定启动子窗口
  2. 子窗口新建信号
  3. 子窗口绑定父窗口的信号接受函数
  4. 子窗口发送数据
  5. 父窗口接收子窗口发送的数据

子向父传递,子新建,子绑定,父接受

from PySide2.QtWidgets import QApplication,QWidget,QVBoxLayout,QLineEdit,QPushButton
from PySide2.QtCore import Signal

# 父窗口
class MyWindow(QWidget):

    def __init__(self):
        super().__init__()
        self.lineEditSend = QLineEdit()
        self.lineEditSend.move(10, 10)
        self.lineEditSend.resize(200, 30)
        self.btn = QPushButton("发送数据到子窗口")

        self.mainLayout = QVBoxLayout()
        self.mainLayout.addWidget(self.lineEditSend)
        self.mainLayout.addWidget(self.btn)
        self.setLayout(self.mainLayout)
        self.setWindowTitle("父窗口")
        self.setGeometry(300, 300, 300, 100)

        self.bind()

    # 1.父窗口绑定启动子窗口
    def bind(self):
        self.subWindow = SubWindow(self)
        self.subWindow.show()


    # 5.父窗口接收子窗口发送的数据
    def receiveData(self,data):
        print(data)
        self.lineEditSend.setText(data)

# 子窗口
class SubWindow(QWidget):
    # 2.子窗口新建信号
    subSignal = Signal(str)

    def __init__(self,parent=None):
        super().__init__()
        self.parent = parent

        self.lineEditSub = QLineEdit()
        self.lineEditSub.move(10, 10)
        self.lineEditSub.resize(200, 30)
        self.btn = QPushButton("发送数据到父窗口")

        self.mainLayout = QVBoxLayout()
        self.mainLayout.addWidget(self.lineEditSub)
        self.mainLayout.addWidget(self.btn)
        self.setLayout(self.mainLayout)
        self.setWindowTitle("子窗口")
        self.setGeometry(300, 300, 300, 100)

        self.bind()


    # 3.子窗口绑定父窗口的信号接受函数
    def bind(self):
        self.subSignal.connect(self.parent.receiveData)
        # 发送信号的按钮
        self.btn.clicked.connect(self.sendData)

    # 4. 子窗口发送数据
    def sendData(self):
        self.subSignal.emit(self.lineEditSub.text())


if __name__ == '__main__':
    app = QApplication([])
    window = MyWindow()
    window.show()
    app.exec_()

父窗口向子窗口传值

  1. 父窗口新建信号
  2. 父窗口绑定子窗口接受信号的函数
  3. 发送值给子窗口
  4. 子窗口接受父窗口数据

父向子传递,父新建,父绑定,子接受

from PySide2.QtWidgets import QApplication,QWidget,QVBoxLayout,QLineEdit,QPushButton
from PySide2.QtCore import Signal

# 父窗口
class MyWindow(QWidget):
    # 1.父窗口新建信号
    mainSignal = Signal(str)
    def __init__(self):
        super().__init__()
        self.lineEditSend = QLineEdit()
        self.lineEditSend.move(10, 10)
        self.lineEditSend.resize(200, 30)
        self.btn = QPushButton("发送数据到子窗口")

        self.mainLayout = QVBoxLayout()
        self.mainLayout.addWidget(self.lineEditSend)
        self.mainLayout.addWidget(self.btn)
        self.setLayout(self.mainLayout)
        self.setWindowTitle("父窗口")
        self.setGeometry(300, 300, 300, 100)
        self.bind()

    # 2.父窗口绑定子窗口接受信号的函数
    def bind(self):
        self.subWindow = SubWindow()
        self.subWindow.show()
        # 绑定子窗口的函数
        self.mainSignal.connect(self.subWindow.receiveData)
        self.btn.clicked.connect(self.sendData)


    # 3.发送值给子窗口
    def sendData(self):
        text = self.lineEditSend.text()
        self.mainSignal.emit(text)

# 子窗口
class SubWindow(QWidget):

    def __init__(self):
        super().__init__()

        self.lineEditSub = QLineEdit()

        self.mainLayout = QVBoxLayout()
        self.mainLayout.addWidget(self.lineEditSub)
        self.setLayout(self.mainLayout)
        self.setWindowTitle("子窗口")
        self.setGeometry(300, 300, 300, 100)


    # 4.子窗口接受父窗口数据
    def receiveData(self,connect):
        print('父窗口传递的参数',connect)
        self.lineEditSub.setText(connect)


if __name__ == '__main__':
    app = QApplication([])
    window = MyWindow()
    window.show()
    app.exec_()

父子窗口互相传值

from PySide2.QtWidgets import QApplication,QWidget,QVBoxLayout,QLineEdit,QPushButton
from PySide2.QtCore import Signal

# 父窗口
class MyWindow(QWidget):

    mainSignal = Signal(str)

    def __init__(self):
        super().__init__()
        self.lineEditSend = QLineEdit()
        self.lineEditSend.move(10, 10)
        self.lineEditSend.resize(200, 30)
        self.btn = QPushButton("发送数据到子窗口")

        self.mainLayout = QVBoxLayout()
        self.mainLayout.addWidget(self.lineEditSend)
        self.mainLayout.addWidget(self.btn)
        self.setLayout(self.mainLayout)
        self.setWindowTitle("父窗口")
        self.setGeometry(300, 300, 300, 100)
        self.bind()

    def bind(self):
        self.subWindow = SubWindow(self)
        self.subWindow.show()
        self.mainSignal.connect(self.subWindow.receiveData)
        self.btn.clicked.connect(self.sendData)


    def receiveData(self,data):
        print('子窗口传递的参数',data)
        self.lineEditSend.setText(data)


    def sendData(self):
        self.mainSignal.emit(self.lineEditSend.text())

# 子窗口
class SubWindow(QWidget):
    # 2.子窗口新建信号
    subSignal = Signal(str)

    def __init__(self,parent=None):
        super().__init__()
        self.parent = parent

        self.lineEditSub = QLineEdit()
        self.lineEditSub.move(10, 10)
        self.lineEditSub.resize(200, 30)
        self.btn = QPushButton("发送数据到父窗口")

        self.mainLayout = QVBoxLayout()
        self.mainLayout.addWidget(self.lineEditSub)
        self.mainLayout.addWidget(self.btn)
        self.setLayout(self.mainLayout)
        self.setWindowTitle("子窗口")
        self.setGeometry(300, 300, 300, 100)

        self.bind()

    def bind(self):
        self.subSignal.connect(self.parent.receiveData)
        self.btn.clicked.connect(self.sendData)

    def sendData(self):
        self.subSignal.emit(self.lineEditSub.text())


    def receiveData(self,connect):
        print('父窗口传递的参数',connect)
        self.lineEditSub.setText(connect)


if __name__ == '__main__':
    app = QApplication([])
    window = MyWindow()
    window.show()
    app.exec_()