2010-10-08 16 views
17

Come connettere pyqtSignal tra due oggetti diversi (classi) CORRETTAMENTE? Intendo le migliori pratiche.Come connettere pyqtSignal tra le classi in PyQT

Guardate quello che ho fatto per raggiungere l'obiettivo: La classe Thermometer viene notificato quando Pot aumenta la sua 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 c'è alcun/modo più semplice migliore per farlo?

Insisto anche (se possibile) sull'uso di segnali PyQt in stile "nuovo".

risposta

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

Ecco come avrei fatto lo Secondo la documentazione:
http://www.riverbankcomputing.com/static/Docs/PyQt4/html/new_style_signals_slots.html

Problemi correlati