【问题标题】:How to connect pyqtSignal between classes in PyQT如何在 PyQT 中的类之间连接 pyqtSignal
【发布时间】:2011-04-22 22:21:19
【问题描述】:

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

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

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()

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

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

【问题讨论】:

    标签: python pyqt pyqt4


    【解决方案1】:
    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

    【讨论】:

      猜你喜欢
      • 2018-09-23
      • 2021-03-05
      • 1970-01-01
      • 1970-01-01
      • 2016-07-25
      • 2017-11-23
      • 2016-07-22
      • 1970-01-01
      相关资源
      最近更新 更多