2016-12-09 2 views
1

Problem Verbindungs ​​

Ich habe eine Klasse mit einem Signal, das während der Initialisierungpyside zu Signal direkt nach der Initialisierung

from PySide.QtCore import * 

class Example(QObject): 
    signal = Signal() 

    def __init__(self): 
     super().__init__() 
     self.signal.emit() 

jetzt emittiert wird i auf das Signal anschließen möchten:

example = Example() 
example.signal.connect(lambda: print('signal emitted')) 

Bei dieser Vorgehensweise wird das Signal nicht erkannt, da die Verbindung hergestellt wird, nachdem das Signal bereits ausgegeben wurde

Lösung?

meine einzige Idee, um das Signal zu fangen ist eine zweite init-Methode für die Klasse wie folgt zu erstellen:

from PySide.QtCore import * 

class Example(QObject): 
    signal = Signal() 

    def __init__(self): 
     super().__init__() 

    def second_init(self): 
     self.signal.emit() 

und verbindet auf diese Weise:

example = Example() 
example.signal.connect(lambda: print('signal emitted')) 
example.second_init() 

Fragen

Ist Gibt es eine Möglichkeit, sich sofort mit dem Signal des Beispielobjekts zu verbinden, ohne die init-Methode aufteilen zu müssen?

Wenn das nicht möglich ist: Ist die Art, wie ich den Weg vorgeschlagen habe oder gibt es einen besseren Weg?

Antwort

1

Sie könnten den Signal-Handler an den Konstruktor übergeben:

from PySide.QtCore import * 

class Example(QObject): 
    signal = Signal() 

    def __init__(self, handler=None): 
     super().__init__() 
     if handler is not None: 
      self.signal.connect(handler) 
     self.signal.emit() 

example = Example(lambda: print('signal emitted')) 
Verwandte Themen