python - 如何在 PyQT 中的类之间连接 pyqtSignal

标签 python pyqt pyqt4

如何在两个不同的对象(类)之间正确连接 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()

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

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

最佳答案

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

关于python - 如何在 PyQT 中的类之间连接 pyqtSignal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3891465/

相关文章:

python - 是否可以创建 PyQt Web 应用程序?

python - 为什么我的某些文件在安装使用 setuptools 打包的 python 模块时不可用?

python - “模块”没有属性 'Treestyle'

python - 用 BeautifulSoup 抓取表格,如何用换行符分隔元素?

python - 转换 GUI 状态

python - 无法使用 Python 3.10.x 建立 LDAP 连接

python - Django render_to_string 行为

python - 同时为两个或更多小部件提供悬停效果?

python - 将 python 3.4 嵌入到 C++ Qt 应用程序中?

PyQt4 - 如何动态调整 Qt 布局的大小