本文主要是介绍pyqt 子窗口向父窗口传递多参数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
信号(Signal
)和槽(Slot
)是Qt
编程中对象间通讯的机制,在编写PyQt5
程序时,不可能离得开信号和槽。在Qt
中,每一个QObject
对象,包括PyQt
中所有继承自QWidget
的控件(因为它们都是QObject
的子对象)都支持signal
和slot
机制。
signal和slot绑定
self.pushButton.clicked.connect(self.button_clicked)
上面的代码表明当按钮pushButton
(QPushButton
是QWidget
的子类)被点击(释放clicked
信号)时,slot
(方法button_clicked
)会被执行。
同一signal绑定多slot
PyQt5
允许一个signal
同时绑定多个slot
,如
from PyQt5.QtWidgets import QPushButtonself.pushButton.clicked.connect(self.button_clicked)
self.pushButton.clicked.connect(self.button_clicked_2)
从执行结果上看,slot
执行的顺序是跟绑定的顺序一样的,即先绑先执行。另外对于多个signal
绑定同一slot
的情况,比较容易理解,就不多说。
一个signal绑定另一个signal
还有种特殊的情况是signal
和signal
的绑定,这里假设还有一个QPushButton pushButton1
,我们让它的clicked
信号和pushButton
的信号clicked
相绑定,如下
from PyQt5.QtWidgets import QPushButtonself.pushButton.clicked.connect(self.button_clicked)
self.pushButton1.clicked.connect(self.pushButton.clicked)
自定义signal
PyQt5
提供了QtCore.pyqtSignal
函数来产生一个signal
,之后就是熟悉的绑定操作了,看个实例就清楚了
from PyQt5.QtWidgets import QWidget
from PyQt5.QtCore import pyqtSignalclass EmitSignal(QWidget):def __init__(self):super(EmitSignal,self).__init__()self.customSignal = pyqtSignal()def emitCustomSignal(self):self.customSignal.emit()
发送带参数的signal
经常需要在某个signal
发送时附带相应的数据,实际上就是传参,然后在slot
方法中接收传递过来的数据,这样就可以非常灵活地实现一些业务逻辑
首先是生成一个signal,
transcoding_thread_status = pyqtSignal(object)
然后将signal
和slot
方法绑定
self.transcoding_thread_status.connect(self.slotShowTransThreadStatus)
slot
方法接收数据
def slotShowTransThreadStatus(something):print(something)
最后来看看,signal emit
时是怎么实现的
self.transcoding_thread_status.emit("Hello")
至此数据就传递成功了,就是这么简单。
以上是传递一个参数,那如果我需要传递2个呢,是不是也可以用上面的方法呢?思路是一样的,细节做一点小修改就好了。
transcoding_thread_status = pyqtSignal(str,str)
如果传递的数据类型是整形的话,就换成int,对应的slot方法也要跟着修改
def slotShowTransThreadStatus(something,anything):print('something={}, anything={}'.format(something, anything))
发送信号时,就跟上2个参数
self.transcoding_thread_status.emit("Hello","world")
类似的,如果需要传递更多参数,请依葫芦画瓢。
这篇关于pyqt 子窗口向父窗口传递多参数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!