本篇继续讲PyQt的信号与槽。涉及到两个问题:
具体的运用请参考以下代码(注意:程序无GUI界面):
from PyQt5.QtCore import QObject , pyqtSignal
class CustSignal(QObject):
signal1 = pyqtSignal() #声明无参数的信号 signal2 = pyqtSignal(int)#声明带一个int类型参数的信号 signal3 = pyqtSignal(int,str) #声明带int和str类型参数的信号 signal4 = pyqtSignal(list)#声明带一个列表类型参数的信号
signal5 = pyqtSignal(dict)#声明带一个字典类型参数的信号
#声明一个多重载版本的信号,包括带int和str类型参数的信号或带str类型参数的信号 signal6 = pyqtSignal([int,str], [str])
def __init__(self,parent=None): super(CustSignal,self).__init__(parent)
#将信号连接到指定槽函数 self.signal1.connect(self.signalCall1) self.signal2.connect(self.signalCall2) self.signal3.connect(self.signalCall3) self.signal4.connect(self.signalCall4) self.signal5.connect(self.signalCall5) self.signal6[int,str].connect(self.signalCall6) self.signal6[str].connect(self.signalCall6OverLoad)
#由代码控制 发射信号 self.signal1.emit() self.signal2.emit(1) self.signal3.emit(1,"text") self.signal4.emit([1,2,3,4]) self.signal5.emit({"name":"Laowang","age":"25"}) self.signal6[int,str].emit(1,"text") self.signal6[str].emit("text")
def signalCall1(self): print("signal1 emit")
def signalCall2(self,val): print("signal2 emit,value:",val)
def signalCall3(self,val,text): print("signal3 emit,value:",val,text)
def signalCall4(self,val): print("signal4 emit,value:",val)
def signalCall5(self,val): print("signal5 emit,value:",val)
def signalCall6(self,val,text): print("signal6 emit,value:",val,text)
def signalCall6OverLoad(self,val): print("signal6 overload emit,value:",val)
if __name__ == '__main__': custSignal = CustSignal()
代码选自《PyQt5快速开发与实战》,略有更改。
本文分享自 Python可视化编程机器学习OpenCV 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!