# @Project :DEMO
# @File :02-自定義信號傳遞多個參數.py
# @Author :miaokela
# @Date :2021/7/25 7:41 下午
from PyQt5.QtCore import *
class MultiSignal(QObject):
"""
信號發送多個參數給槽函數
"""
signal_01 = pyqtSignal()
signal_02 = pyqtSignal(int)
signal_03 = pyqtSignal(int, str)
signal_04 = pyqtSignal(list)
signal_05 = pyqtSignal(dict)
# 類似重載的概念,逗號隔開選項,可以傳左側的兩個參數,或者,右側的一個參數,數據類型固定
signal_06 = pyqtSignal([int, str], [str])
def __init__(self):
super(MultiSignal, self).__init__()
# 信號關聯槽
self.signal_01.connect(self.signal_01_call)
self.signal_02.connect(self.signal_02_call)
self.signal_03.connect(self.signal_03_call)
self.signal_04.connect(self.signal_04_call)
self.signal_05.connect(self.signal_05_call)
self.signal_06[int, str].connect(self.signal_06_call) # 不指定中括號,默認使用信號參數集的第一個
self.signal_06[str].connect(self.signal_07_call)
# 發送信號
self.signal_01.emit()
# self.signal_02.emit(10)
self.signal_03.emit(10, '10')
self.signal_04.emit([10])
self.signal_05.emit({'name': 'mic'})
self.signal_06[int, str].emit(10, '10')
self.signal_06[str].emit('10')
def signal_01_call(self):
print('signal_01 發出信號')
def signal_02_call(self, val):
print('signal_02 發出信號', val)
def signal_03_call(self, val, txt):
print('signal_03 發出信號', val, txt)
def signal_04_call(self, val):
print('signal_04 發出信號', val)
def signal_05_call(self, val):
print('signal_05 發出信號', val)
def signal_06_call(self, val):
print('signal_06 發出信號', val)
def signal_07_call(self, val, txt):
print('signal_07 發出信號', val, txt)
if __name__ == '__main__':
multi_signal = MultiSignal()