दिलचस्प पोस्ट
वेबसाइट पर ब्रूट फोर्स लॉग इन को रोकना असतत एक्स पैमाने का क्रम बदलें कई श्रेणियों के साथ बॉक्सप्लेट्स के जेफ्री चाट स्केलिंग MySQL में एक क्वेरी निष्पादित करते समय केवल _full_group_by संबंधित त्रुटि पुनरावर्ती पैटर्न से फ़ाइलें जोड़ें जावा में यूआरएल से जेएसएन को पढ़ने का सबसे आसान तरीका जावा बंद हुक PHP त्रुटि: Mysqli_real_escape_string () अपेक्षा करते हैं कि 2 पैरामीटर, 1 दिए गए हैं JSF कन्वर्टडेटटाइम पिछले दिन रेंडर करता है पाठ फ़ाइलों में स्ट्रिंग की खोज कैसे करें? जावा स्टैनफोर्ड एनएलपी: स्पीच लेबल्स का भाग? स्थिर वर्ग के सदस्य के लिए अनिर्धारित संदर्भ सरलतम Socket.io उदाहरण का एक उदाहरण क्या है? मौजूदा उपयोगकर्ता कैसे प्राप्त करें और MVC5 में उपयोगकर्ता वर्ग का उपयोग कैसे करें? ImageView गतिशील चौड़ाई के साथ एक वर्ग हो?

QtCore.QObject.Connect एक लूप में केवल पिछले उदाहरण को प्रभावित करता है

मुझे एक पाश मिला है मैंने एक QCheckBox बनाया है और इसे एक QTableWidget सेल में रखा है, और सब कुछ ठीक है। पाश के प्रत्येक चरण में मैंने माइस्लॉट स्लॉट के लिए एक connect फ़ंक्शन कहा है, लेकिन केवल अंतिम QCheckBox उदाहरण लागू किया गया है। मैंने बहुत कुछ किया और मुझे बहुत से लोगों की समस्या है। मैंने उनके समाधान लागू किए हैं, लेकिन मेरी समस्या बनी हुई है

 for row in xrange(len(uniqueFields)): instance = QtGui.QCheckBox(uniqueFields[row], findInstance.tableWidget) print QtCore.QObject.connect(instance, QtCore.SIGNAL(_fromUtf8("stateChanged (int)")), lambda: findInstance.projectsInstance.myslot( "TWCH", findInstance, instance.text(), instance.checkState(), instance)) findInstance.tableWidget.setRowCount(findInstance.tableWidget.rowCount() + 1) findInstance.tableWidget.setCellWidget(row, 0, instance) 

नोट: मेरी connect फ़ंक्शन रिटर्न True

कैसे एक लूप में connect समारोह बनाने के connect कि सभी instances की गणना?

वेब के समाधान से एकत्रित समाधान "QtCore.QObject.Connect एक लूप में केवल पिछले उदाहरण को प्रभावित करता है"

मुझे एक ही समस्या है, आपको functools.partial उपयोग करना चाहिए जैसे कि:

 for key, val in a_DICT_THAT_YOU_STORED_YOUR_OBJECTS_AND_STRINGS: obj = partial( findInstance.projectsInstance.myslot,arg1="TWCH",arg2=self,arg3=key,arg4=val.checkState() ) QtCore.QObject.connect(val, QtCore.SIGNAL(_fromUtf8("stateChanged (int)")), obj) 

बेशक, argx को आपके फ़ंक्शन नाम के आपके तर्क के वास्तविक नाम पर सेट होना चाहिए।

किसी डिफ़ॉल्ट तर्क में लूप चर को रखें, जैसे:

 lambda state, instance=instance: findInstance.projectsInstance.myslot( "TWCH", findInstance, instance.text(), instance.checkState(), instance) 

यह प्रत्येक lambda को instance चर की अपनी स्थानीय प्रति देगा।

संपादित करें

यहां एक सरल स्क्रिप्ट है जो डिफ़ॉल्ट लैम्ब्डा तर्कों का उपयोग करने का तरीका दर्शाती है:

 from PyQt4 import QtGui class Window(QtGui.QWidget): def __init__(self): QtGui.QWidget.__init__(self) layout = QtGui.QVBoxLayout(self) for index in range(4): instance = QtGui.QCheckBox('Checkbox(%d)' % index, self) instance.stateChanged.connect( lambda state, instance=instance: self.mySlot(instance.text())) layout.addWidget(instance) def mySlot(self, text): print('clicked: %s' % text) if __name__ == '__main__': import sys app = QtGui.QApplication(sys.argv) window = Window() window.show() sys.exit(app.exec_()) 

समस्या यह है कि आप lambda का उपयोग कर एक फ़ंक्शन बना रहे हैं, जहां समारोह के अंदर कुछ चर फ़ंक्शन के तर्कों के रूप में पारित नहीं किए जा रहे हैं। जब लैम्ब्डा फ़ंक्शन निष्पादित होता है, जब संकेत उत्सर्जित होता है, तो उस समय के समय में उन चर (जैसे instance ) के मूल्य का उपयोग करता है स्पष्ट होने के लिए, हर लैम्ब्डा फ़ंक्शन आपको समय निर्धारित करने के बजाय रनटाइम पर instance के मान का उपयोग कर रहा है। इसलिए instance केवल हमारे लूप के अंतिम पुनरावृत्त में इस्तेमाल किए गए ऑब्जेक्ट का संदर्भ रखता है, जो आपके द्वारा देखे गए व्यवहार को बताता है।

कुछ उपयोगी जानकारी यहां पाई जा सकती है (टिप्पणी भी पढ़ें) http://eli.thegreenplace.net/2011/04/25/passing-extra-arguments-to-pyqt-slot/

उपर्युक्त लिंक की टिप्पणी से:

आप क्या कर सकते हैं एक अन्य कार्य लैम्ब्डा उत्पन्न करता है, जैसे कुछ:

 def make_callback(param): return lambda: self.on_button(param) 

और कनेक्शन में, make_callback(i) कॉल करें। फिर प्रत्येक चलना के लिए एक अलग लैम्ब्डा तैयार की जाती है।

तो आप इसे सामान्य बनाना चाहते हैं और make_callback फ़ंक्शन के instance तरह चीजें पास कर make_callback हैं और फिर make_callback फ़ंक्शन के अंदर अपनी lambda परिभाषा को make_callback । मैं इसका एक स्पष्ट उदाहरण प्रदान करेगा, लेकिन जैसा कि दूसरे उत्तर में कहते हैं, आपका प्रश्न आपके प्रश्न में बहुत गड़बड़ हो गया है और मुझे आपके विशिष्ट अनुप्रयोग के लिए यह गलत लगेगा। यदि आपने जो कुछ कहा है उसका पालन नहीं कर रहे हैं, तो आपके प्रश्न में कोड को स्पष्ट करें और मुझे एक उदाहरण बनाने पर जाना होगा!