|
上一篇信号与槽的连接,与信号发射都是手动的,而且信号传递比较单一,这次我们弄一些自动的。
from PyQt5.QtCore import *
class MultiSignal(QObject):
##信号变量定义
#无参信号
signal1=pyqtSignal()
#
signal2=pyqtSignal(int)
#
signal3=pyqtSignal(int,str)
#
signal4=pyqtSignal(list)
#
signal5=pyqtSignal(dict)
#声明一个重载对象的信号,参数可以是int与str 或者单一个str
signal6=pyqtSignal([int,str],[str])
##将信号与槽的连接与信号的发射放入类的初始化方法中
def __int__(self):
super(MultiSignal,self).__init__()#这个方法表示对该类的父类也进行初始化
##信号与槽的连接
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.signalCall6_overload)
##信号的发射
self.signal1.emit()
self.signal2.emit(10)
self.signal3.emit(1,"fo")
self.signal4.emit([1,2,3,4,5])
self.signal5.emit({"name":"jia"})
#当有重载对象的信号时,信号的发射也要按照重载的类型分开发射,并且要标注[]
self.signal6[int,str].emit(20,"nn")
self.signal6[str].emit("mm")
##槽函数
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 signalCall6_overload(self,val):
print("signal6_over emit,value:",val)
if __name__ == '__main__':
custSignal =MultiSignal().__int__()
#按道理来说,应该是custSignal =MultiSignal(),默认调用初始化,但不行。有知道为何的大佬方便的话可以告知一下仔。
结果:

|