개발/Python

[파이썬] PyQT의 클래스간에 pyqtSignal을 연결하는 방법

MinorMan 2021. 1. 11. 04:37
반응형

<질문>

연결 방법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 신호 사용을 주장합니다.


<답변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

반응형