python - español - Cómo conectar pyqtSignal entre clases en PyQT
qt designer python windows (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()
Así es como lo habría hecho de acuerdo con los documentos:
http://www.riverbankcomputing.com/static/Docs/PyQt4/html/new_style_signals_slots.html
¿Cómo conectar pyqtSignal
entre dos objetos diferentes (clases) CORRECTAMENTE? Me refiero a la mejor práctica.
Mira lo que he hecho para lograr el objetivo: la clase de Thermometer
se notifica cuando Pot
aumenta su temperatura:
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()
¿O hay alguna forma más fácil / mejor de hacerlo?
También insisto (si es posible) en el uso de "nuevas" señales de estilo PyQt.