高级自定义信号与槽(一般流程)
1. 定义信号
2. 定义槽函数
3. 连接信号与槽函数
4. 发射信号
通过类成员变量定义信号对象
class MySignal(Qwidget):
signal_noParameters = pyqtSignal()
signal_intparameters = pyqtSignal(int)
signal_intparameters_overload = pyqtSignal([int], [str])
signal_twoparameters = pyqtSignal(int, str)
signal_twoparameters_overload = pyqtSignal([int, int], [int, str])
定义槽函数
class MYSlot(Qwidget):
def setValue_noparameters(self):
""" 无参槽函数 """
def setValue_one_int_parameters(self, int_para):
""" 一整形参槽函数 """
def setValue_one_s_parameters(self, str_para):
""" 一字符串参槽函数 """
def setValue_two_parameters(self, x, y):
""" 两个整形参槽函数 """
def setValue_two_parameters(self, x, y):
""" 两个参(int,str)槽函数 """
连接槽函数
signal1 = MySignal().signal_noParameters
signal2 = MySignal().signal_twoparameters_int_str
signal3 = MySignal().signal_twoparameters__int_str_overload
slot1 = MySlot().setValue_noparameters
slot2 = MySlot().setValue_twoparameters_int_str
slot3 = MySlot().setValue_twoparameters_int_str_overload
signal1.connect(slot1)
signal2.connect(slot12)
signal3[int, str].connect(slot3)
singal1.emit()
singal2.emit(1, '啊哈')
singal3.emit(2, 'abc')
使用自定义的函数
-
使用lambda表达式
signal.connect(lambda: slot(parameters))
def slot(parameters):
pass
-
使用functools中的partial函数
button1.clicked.connect(partial(self.onButtonClick, 1))
装饰器信号与槽
@PyQt5.QtCore.pyqtSlot(参数)
def on_发送者对象名称_发射信号名称(self, 参数):
pass