pyqt自定义信号与信号重载

在C++中,自定义信号的写法是

signals:
     void sig1();
     void sig2();

一  pyqt自定义信号

pyqt的自定义信号要类pyqtSignal来定义:

    # 定义一个信号
    # 无参数信号 signal1 = pyqtSignal()
    signal1 = pyqtSignal(object)

    # 发送3个参数的信号
    signal2 = pyqtSignal(str,int,int)

发送信号还是用emit, 只是写法不同

self.signal1.emit('Hello PyQt5')

二 信号重载

pyqt还可以进行信号重载,例如下面的信号

 # 声明一个重载版本的信号,也就是槽函数的参数可以是int和str类型,也可以只有一个str类型的参数
 signal3 = pyqtSignal([int, str], [str])

重载的信号发送和槽链接与上面的有所不同

发送

    def run3(self):
        self.signal3[int,str].emit(111, "1 asd")

    def run3Overload(self):
        self.signal3[str].emit("wer")

链接

send.signal3[int,str].connect(slot.get3)
send.signal3[str].connect(slot.get3Overload)

 本例子全部代码如下:

from PyQt5.QtCore import *
class MyTypeSignal(QObject):
    # 定义一个信号
    # 无参数信号 signal1 = pyqtSignal()
    signal1 = pyqtSignal(object)

    # 发送3个参数的信号
    signal2 = pyqtSignal(str,int,int)

    # 声明一个重载版本的信号,也就是槽函数的参数可以是int和str类型,也可以只有一个str类型的参数
    signal3 = pyqtSignal([int, str], [str])

    def run1(self):
        self.signal1.emit('Hello PyQt5')

    def run2(self):
        self.signal2.emit("hello",3,4)

    def run3(self):
        self.signal3[int,str].emit(111, "1 asd")

    def run3Overload(self):
        self.signal3[str].emit("wer")


class MySlot(QObject):
    def get1(self,msg):
        print("信息:" + msg)

    def get2(self,msg,a,b):
        print(msg)
        print(a+b)

    def get3(self,val,text):
        print("sig3 emit,int str:", val,text)

    def get3Overload(self,val):
        print("sig3 overload emit,str:", val)


if __name__ == '__main__':
    send = MyTypeSignal()
    slot = MySlot()

    send.signal1.connect(slot.get1)
    send.signal2.connect(slot.get2)
    send.signal3[int,str].connect(slot.get3)
    send.signal3[str].connect(slot.get3Overload)

    #发信号
    send.run1()
    send.run2()
    send.run3()
    send.run3Overload()

    #断开连接后再发信号,槽函数收不到
    send.signal1.disconnect(slot.get1)
    send.run1()

运行结果

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

令狐掌门

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值