2012-12-23 15 views
8

के रूप में एक सूची के साथ PyQt4 संकेतों को परिभाषित करेंतर्क

http://pyqt.sourceforge.net/Docs/PyQt4/new_style_signals_slots.html

के अनुसार mysignal = pyqtSignal(int) द्वारा एक पूर्णांक तर्क लेता के साथ मैं एक PyQt4 संकेत परिभाषित कर सकते हैं। मैं एक सिग्नल को कैसे परिभाषित कर सकता हूं जो myobject नामक किसी ऑब्जेक्ट के पूर्णांक और स्ट्रिंग्स की सूची या अधिक सामान्य रूप से तर्क के रूप में परिभाषित करता है।

उत्तर

14

निम्न कोड एक संकेत बनाता है जो दो तर्क लेता है: एक पूर्णांक और वस्तुओं की एक सूची। यूआई में सिर्फ एक बटन है। जब बटन क्लिक किया जाता है तो सिग्नल उत्सर्जित होता है।

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

जब बटन आप की तरह कुछ देखना चाहिए पर क्लिक करें: अपने टर्मिनल पर

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

+0

ओह, महान उदाहरण! :) – kuanyui

+0

ब्रावो। क्या यह उम्मीद है कि कनेक्ट() में 'लैम्ब्डा' की मौत को सक्षम बनाता है? –

+0

आपने 'pyqtSlot' सजावट का उपयोग नहीं किया है। मैंने इसे डालने के बाद सीजी दोषों को दूर कर लिया है, इसलिए मैं इसे 'mySignalHandler' में जोड़ने की अनुशंसा करता हूं। –

संबंधित मुद्दे