【python编程】使用pyqtsignal实现消息回调的注意事项

PyQt5中的pyqtsignal,是一个非常有用的类,可以帮助python程序实现消息发送和消息接收,即实现事件机制。如果你在使用pyqtsignal中过程中无法捕获消息,那一定是没有领悟到pyqtsignal的使用要领。


要领:

【1】pyqtSignal对象必须定义在继承自QObject的类中;

【2】pyqtSignal对象作为类级别变量存在;

【3】该类的初始化方法中必须调用父类的初始化方法。

代码如下:

# 【1】信号发生类,必须继承自QObject类
class message_sender(QObject):

    # 【2】pyqtSignal对象必须以类变量的形式存在,在此定义
    signal = pyqtSignal(str)

    # 【3】必须调用父类初始化,否则无法使用pyqtSignal
    def __init__(self):
        super().__init__()

    # 【4】发送信号
    def work(self):
        self.signal.emit("开始工作")

pyqtSignal使用总结:

  • pyqtSignal对象对定义环境有要求;
  • 对信号接收环境没要求(即普通方法,类方法,类是否继承PyQt类都没要求);
  • 对运行环境没要求(即console,Qt环境都可以)

完整示例代码如下:

import sys
from PyQt5 import QtWidgets
from PyQt5.QtCore import pyqtSignal, QObject

'''
pyqtSiganl使用总结:
pyqtSiganl对象对定义环境有要求;
对信号接收环境没要求(即普通方法,类方法,类是否继承PyQt类都没要求);
对运行环境没要求(即console,Qt环境都可以)
'''
# 【1】信号发生类,必须继承自QObject类
class message_sender(QObject):

    # 【2】pyqtSignal对象必须以类变量的形式存在,在此定义
    signal = pyqtSignal(str)

    # 【3】必须调用父类初始化,否则无法使用pyqtSignal
    def __init__(self):
        super().__init__()

    # 【4】发送信号
    def work(self):
        self.signal.emit("开始工作")

# 【5】可用普通的方法接收信号
def callback(msg):
    print("收到信号:" + msg)

# 【6】也可以在类的方法中接收信号,无需继承PyQt类
class message_receiver():

    def __init__(self):
        super().__init__()

    def callback(self,msg):
        print("收到信号:"+msg)

    def work(self):
        sender=message_sender()
        sender.signal.connect(self.callback)
        sender.work()

if __name__ == '__main__':
    # 示例1:在python的cosole工作模式下,利用普通方法接收信号
    sender=message_sender()
    sender.signal.connect(callback)
    sender.work()

    # # 示例2:在python的cosole工作模式下,利用对象方法接收信号
    # receiver=message_receiver()
    # receiver.work()
    # 
    # # 示例3:在python的Qt工作模式下,利用普通方法接收信号
    # app = QtWidgets.QApplication(sys.argv)
    # sender=message_sender()
    # sender.signal.connect(callback)
    # sender.work()
    # sys.exit(app.exec_())
    # 
    # # 示例4:在python的Qt工作模式下,利用普通方法接收信号
    # app = QtWidgets.QApplication(sys.argv)
    # receiver=message_receiver()
    # receiver.work()
    # sys.exit(app.exec_())

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

时空worker

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

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

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

打赏作者

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

抵扣说明:

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

余额充值