2010-08-15 11 views
2

puis-je connecter deux objets appartenant à des classes différentes?Les différentes classes Signal/SLOT de PyQt

permet de dire que je veux le signal button1 clique dessus() pour effacer line2

class A(QGroupBox): 
    def __init__(self, parent=None): 
     super(A, self).__init__(parent) 
     self.button1= QPushButton('bt1') 
     self.button1.show() 

class B(QGroupBox): 
    def __init__(self, parent=None): 
     super(B, self).__init__(parent) 
     self.line2 = QLineEdit() 
     self.line2.show() 

ob1 = A() 
ob2 = B() 

Répondre

3

Oui, créer une méthode dans l'objet B qui est lié à un signal dans l'objet A. Notez comment connect est appelé (ce qui est juste un exemple):

self.connect(self.okButton, QtCore.SIGNAL("clicked()"), 
       self, QtCore.SLOT("accept()")) 

Le troisième argument est l'objet avec l'emplacement et le quatrième le nom d'emplacement. Les objets d'envoi et de réception peuvent certainement être différents.

+0

def obconnect (auto, OB2): self.connect (self.button1, SIGNAL (clicked() '), ob2.line, SLOT («clear())) ob1.obconnect (OB2) Tu voulais dire quelque chose comme ça? –

+0

@redouane: presque. Je ne recommande pas d'accéder directement aux attributs de ob2 à partir d'ob1 - il est préférable d'encapsuler cette interaction dans une méthode d'ob2 elle-même –

+1

Cela peut être écrit plus simplement dans les versions PyQt non-anciennes: 'self.okButton.clicked.connect (self.accept) ' – Macke

Questions connexes