PyQt5最全81 信号与槽之为类添加多个参数可选的信号
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类型的参数(别误会成正则表达式那种了[a-z])
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.connect(self.signalCall6) # 不指定的情况下,会默认关联到第一个[int, str]下
self.signal6[str].connect(self.signalCall6Overload)
self.signal6[int, str].connect(self.signalCall6)
# 触发
self.signal1.emit()
self.signal2.emit(1)
self.signal3.emit(1, 'Hello, world')
self.signal4.emit([1, 2, 3, 4, 5, 6])
self.signal5.emit({'name': 'niuniu', 'age': 'guess'})
self.signal6[str].emit('test') # 调用时也需要指定的
self.signal6[int, str].emit(100, 'test')
def signalCall1(self):
print('signal1 emit')
def signalCall2(self, val):
print('signal1 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__':
multiSignal = MultiSignal()
结果
signal1 emit
signal1 emit, value: 1
signal3 emit, value: 1 Hello, world
signal4 emit, value: [1, 2, 3, 4, 5, 6]
signal5 emit, value: {'name': 'niuniu', 'age': 'guess'}
signal6 overload emit, value: test
signal6 emit, value: 100 test