Pyside2界面窗口间通讯
子窗口向父窗口传值
- 父窗口绑定启动子窗口
- 子窗口新建信号
- 子窗口绑定父窗口的信号接受函数
- 子窗口发送数据
- 父窗口接收子窗口发送的数据
子向父传递,子新建,子绑定,父接受
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_()
父窗口向子窗口传值
- 父窗口新建信号
- 父窗口绑定子窗口接受信号的函数
- 发送值给子窗口
- 子窗口接受父窗口数据
父向子传递,父新建,父绑定,子接受
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_()