2012-12-23 7 views

Antwort

14

Der folgende Code erzeugt ein Signal, das zwei Argumente benötigt: eine ganze Zahl und eine Liste von Objekten. Die Benutzeroberfläche enthält nur eine Schaltfläche. Das Signal wird ausgegeben, wenn auf die Schaltfläche geklickt wird.

from PyQt4.QtGui import * 
from PyQt4.QtCore import * 

class Foo(object): 
    pass 

class MyWidget(QWidget): 
    mysignal = pyqtSignal(int, list) 

    def __init__(self, parent=None): 
     super(MyWidget, self).__init__(parent) 
     self.hlayout = QHBoxLayout() 
     self.setLayout(self.hlayout) 
     self.b = QPushButton("Emit your signal!", self) 
     self.hlayout.addWidget(self.b) 
     self.b.clicked.connect(self.clickHandler) 
     self.mysignal.connect(self.mySignalHandler) 

    def clickHandler(self): 
     self.mysignal.emit(5, ["a", Foo(), 6]) 

    def mySignalHandler(self, n, l): 
     print n 
     print l 

if __name__ == '__main__': 
    import sys 
    app = QApplication(sys.argv) 
    w = MyWidget() 
    w.show() 
    sys.exit(app.exec_()) 

Wenn die Schaltfläche klicken Sie so etwas wie sehen sollte:

5 
['a', <__main__.Foo object at 0xb7423e0c>, 6] 

auf Ihrem Terminal.

+0

Oh mein, tolles Beispiel! :) – kuanyui

+0

Bravo. Ermöglicht dies hoffentlich den Tod von 'Lambda' in connect()? –

+0

Sie haben den 'pyqtSlot' Dekorator nicht verwendet. Ich habe seg Fehler nach dem Einfügen weg, also würde ich empfehlen, es zu "mySignalHandler" hinzuzufügen. –