2010-10-08 12 views
17

Comment connecter pyqtSignal entre deux objets différents (classes) CORRECTEMENT? Je veux dire la meilleure pratique.Comment connecter pyqtSignal entre classes dans PyQT

Regardez ce que je l'ai fait pour atteindre l'objectif: La classe Thermometer est averti lorsque Pot augmente sa température:

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

Ou est-il plus facile/meilleure façon de le faire?

J'insiste également (si possible) sur l'utilisation de signaux PyQt de "nouveau" style.

Répondre

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

Voici comment je l'ai fait selon les docs:
http://www.riverbankcomputing.com/static/Docs/PyQt4/html/new_style_signals_slots.html