कैसे पारित करने के लिए एक चर एक समारोह में कनेक्ट करने के लिए एक बटन pyqt5 अजगर [बंद]

0

सवाल

def open_browser(i):
            print("open")

 for i in range(5):
     new_name_label = 'name_label'+str(i)
     list_names.append(new_name_label)
     setattr(self, list_names[i], QPushButton(str(ordered_names[i]),self))
     exec(f'self.name_label{i}.setGeometry(250,{y_axis_name},340,110)')
     exec(f'self.name_label{i}.clicked.connect(open_browser({i}))')
     y_axis_name= y_axis_name + 110

"मैं" एक चर रहा है और मैं खिचड़ी भाषा का एक रास्ता खोजने के लिए बटन पर क्लिक करें । name_label और फिर से कनेक्ट करने के लिए है कि एक समारोह है और पास में चर "मैं". जब मैं कोशिश करने के लिए इसे चलाने के लिए मैं त्रुटि मिलती है

image of error

ऐसा लगता है कि चर "मैं" नहीं है द्वारा प्रतिस्थापित किया जा रहा से एक की रेंज में संख्या का प्रतिनिधित्व करती है "मैं" और इसके बजाय मैं पत्र की कोशिश कर रहा है के लिए पारित किया जा सकता है ।

pyqt5 python
2021-11-22 17:19:19
1

सबसे अच्छा जवाब

1

यदि आप चाहते हैं आवंटित करने के लिए समारोह के साथ तर्क है, तो आप उपयोग कर सकते हैं lambda बनाने के लिए समारोह तर्क के बिना

connect( lambda:open_browser(i) )

लेकिन अगर आप इसे चलाने के लिए पाश में तो आप की जरूरत हो सकती है यह भी कॉपी करने के लिए मूल्य i करने के लिए नए चर.

connect( lambda x=i:open_browser(x) )

यदि आप सीधे का उपयोग i फिर सभी बटन का उपयोग करेगा संदर्भ के लिए चर iनहीं , मूल्यों से i - और अंत में सभी बटन मिल जाएगा एक ही मूल्य के अंतिम मूल्य के लिए आवंटित i पाश में.


कोड connect(open_browser(i)) काम करता है के रूप में

result = open_browser(i) 
connect(result)

और क्योंकि def open_browser() का उपयोग नहीं करता return तो यह स्वचालित रूप से चलाता है return None और अपने कोड की तरह काम करता है

result = None
connect(result)

और आप

connect(None)

और बाद में त्रुटि से पता चलता है Unexpected type "NoneType"


BTW:

यदि आप का उपयोग for-पाश बनाने के लिए वस्तुओं तो बेहतर उपयोग list रखने के लिए इन वस्तुओं. यह की जरूरत नहीं है exec() और यह अधिक उपयोगी हो सकते हैं के बाद, क्योंकि बाद में आप फिर से उपयोग कर सकते हैं for-पाश की जाँच करने के लिए सभी वस्तुओं की सूची से.

इसके अलावा, यह बहुत ही अजीब लग रहा है जब किसी की जरूरत है exec() बनाने के लिए कोड.

self.buttons = []

for i in range(5):
     b = QPushButton(str(ordered_names[i]), self)
     b.setGeometry(250, y_axis_name, 340, 110)
     b.clicked.connect( lambda x=i:open_browser(x) )

     self.buttons.append( b )

     y_axis_name += 110     
2021-11-22 21:28:58

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में