前言
本文是作为一个记录,使用pyqt5来编写窗口时,如果创建了两个或多个窗口,且希望主窗口的数据可以同时更新到其他窗口,如何实现?
环境配置
系统:windows
平台:visual studio code
语言:python
库:PyQt5
代码实现
首先,我们创建两个窗口类,一个是主窗口Qmainwindow,一个是子窗口qwidget。
在主窗口中,我们新建一个槽信号:
infosend=pyqtSignal(str)
此信号用于向子窗口发送信息。信息的格式为str即字符串,当然你也改为其他数据格式,此处为示例,即等会我们将向子窗口发送字符。
我们在子窗口创建一个函数,用于接收字符,并打印出来:
def showinfo(self,info):
print(info)
self.lbl1.setText(info)
我们在主窗口发送信号,并连接到子窗口的函数:
self.infosend.emit("helloworld")
self.infosend.connect(self.subwin1.showinfo)
同样,如果我们希望从子窗口往主窗口发送数据,也是利用同样的逻辑。
我们在子窗口新建一个槽信号:
#用于传递给主窗口的数据
sg1=pyqtSignal(str)
然后在子窗口的某个函数中触发:
def on_lv1_dbclick(self):
self.sg1.emit(self.lv1.currentItem().text())
可以是按钮点击,或者是其他部件的双击或是任何其他事件来触发,都是可以的。
传递的数据,根据自己的需要来定义,本文示例为str字符串。
子窗口发送的数据,我们需要在主窗口接收:
self.imginfo.connect(self.subwin1.showimginfo)
self.subwin1.sg1.connect(self.on_subwin1_datarecv_1)
如上,和主窗口发送数据的逻辑是一致的,同样是槽信号连接某个函数即可。只不过,主窗口发送数据连接的是子窗口的函数,而子窗口发送数据连接的是主窗口的函数:
def on_subwin1_datarecv_1(self,data):
print(data)
self.lbl_from_subwin.setText(data)
这样一来,pyqt5中多窗口之间的数据传递就实现了。
我们来看一下实例演示:
pyqt5多窗口数据传递示例