为类添加信号–代码还是有些问题,没有打印内容
一.非正确版本,稍后,在对比下内容,下面有可以运行的版本
"""
为类添加信号
"""
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[str].connect(self.signalcall6over)
self.signal6[int,str].connect(self.signalcall6)
print("connect finish")
# 触发信号
self.signal1.emit()
self.signal2.emit(10)
self.signal3.emit(99, "hello")
self.signal4.emit([1, 7, 45, 5])
self.signal5.emit({
'name': 'tom', 'age': 26})
self.signal6[int, str].emit(20, "test")
self.signal6[str].emit(20)
print("emit")
# 下面的调用函数,参数 个数 以及 类别 需要与上面的做对应
def signalcall1(self):
print("signal1 emit")
def signalcall2(self, val):
print("signal2 emit", val)
def signalcall3(self, val, text):
print("signal3 emit", val, text)
def signalcall4(self, val):
print("signal4 emit", val)
def signalcall5(self, val):
print("signal5 emit", val)
# 重载或者绑定的方法,下面两个都是,第一个是由两个参数的,第二个是有一个参数的:
def signalcall6(self, var, text):
print("signal emit", var, text)
def signalcall6over(self, var):
print("signal emit", var)
if __name__ == '__main__':
multisignal = MultiSignal()
二.正确版本:
from PyQt5.QtCore import pyqtSignal,QObject
class MultiSignal(QObject):
signal1=pyqtSignal()
signal2=pyqtSignal(int)
signal3 = pyqtSignal(int, str)
signal4 = pyqtSignal(list)
signal5 = pyqtSignal(dict)
signal6 = pyqtSignal([int, str], [str])
def __init__(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[str].connect(self.signalcall6over)
self.signal6[int, str].connect(self.signalcall6)
self.signal1.emit()
self.signal2.emit(10)
self.signal3.emit(99, "hello")
self.signal4.emit([1, 7, 45, 5])
self.signal5.emit({
'name': 'tom', 'age': 26})
self.signal6[int, str].emit(20, "test")
self.signal6[str].emit("tom")
def signalcall1(self):
print("signal1 emit")
def signalcall2(self,val):
print("signal2 emit",val)
def signalcall3(self, val, text):
print("signal3 emit", val, text)
def signalcall4(self, val):
print("signal4 emit", val)
def signalcall5(self, val):
print("signal5 emit", val)
# 重载或者绑定的方法,下面两个都是,第一个是由两个参数的,第二个是有一个参数的:
def signalcall6(self, var, text):
print("signal emit", var, text)
def signalcall6over(self, var):
print("signal emit", var)
if __name__ == '__main__':
multisignal=MultiSignal()