如何在 PyQT 中的类之间连接 pyqtSignal [英] How to connect pyqtSignal between classes in PyQT

查看:30
本文介绍了如何在 PyQT 中的类之间连接 pyqtSignal的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何正确连接两个不同的对象(类)之间的 pyqtSignal?我的意思是最佳实践.

How to connect pyqtSignal between two different objects (classes) PROPERLY? I mean best practice.

看看我为实现目标做了什么:Thermometer 类在 Pot 温度升高时收到通知:

Look what I have done to achieve the goal: The Thermometer class is notified when Pot increases its temperature:

from PyQt4 import QtCore

class Pot(QtCore.QObject):
    temperatureRaisedSignal = QtCore.pyqtSignal()

    def __init__(self, parent=None):
        super(Pot, self).__init__(parent)
        self.temperature = 1
    def Boil(self):
        self.temperature += 1
        self.temperatureRaisedSignal.emit()
    def RegisterSignal(self, obj):
        self.temperatureRaisedSignal.connect(obj)

class Thermometer():
    def __init__(self, pot):
        self.pot = pot
        self.pot.RegisterSignal(self.temperatureWarning)
    def StartMeasure(self):
        self.pot.Boil()
    def temperatureWarning(self):
        print("Too high temperature!")

if __name__ == '__main__':
    pot = Pot()
    th = Thermometer(pot)
    th.StartMeasure()

或者有什么更简单/更好的方法吗?

Or is there any easier / better way to do it?

我也坚持(如果可能的话)使用新"风格的 PyQt 信号.

I also insist (if possible) on using "new" style PyQt signals.

推荐答案

from PyQt4 import QtCore

class Pot(QtCore.QObject):

    temperatureRaisedSignal = QtCore.pyqtSignal()

    def __init__(self, parent=None):
        QtCore.QObject.__init__(self)
        self.temperature = 1

    def Boil(self):
        self.temperatureRaisedSignal.emit()
        self.temperature += 1

class Thermometer():
    def __init__(self, pot):
        self.pot = pot
        self.pot.temperatureRaisedSignal.connect(self.temperatureWarning)

    def StartMeasure(self):
        self.pot.Boil()

    def temperatureWarning(self):
        print("Too high temperature!")

if __name__ == '__main__':
    pot = Pot()
    th = Thermometer(pot)
    th.StartMeasure()

根据文档,我会这样做:
http://www.riverbankcomputing.com/static/Docs/PyQt4/html/new_style_signals_slots.html

This is how I would've done it according to the docs:
http://www.riverbankcomputing.com/static/Docs/PyQt4/html/new_style_signals_slots.html

这篇关于如何在 PyQT 中的类之间连接 pyqtSignal的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆