मैं अपनी स्क्रीन पर लूप के साथ कई बटन बनाने की कोशिश कर रहा हूं। मैं अपने फ़ंक्शन को तर्कों के साथ कॉल करने के लिए लैम्ब्डा का उपयोग कर रहा हूं। लेकिन मैं प्रत्येक बटन को अलग-अलग तर्क नहीं दे सकता। इसलिए मुझे यह जानने की जरूरत है कि ऐसा क्यों हो रहा है। इसका क्या उपाय है। क्या टिंकर इन बटनों के लिए समान रैम कैश का उपयोग कर रहा है? यदि ऐसा है, तो मैंने इन बटनों को दूसरी सूची के साथ अलग-अलग नाम देने की कोशिश की लेकिन समस्या वही थी। पहले से ही उत्तर देने के लिए धन्यवाद ..

from tkinter import *
def printmyvalue(value):
    print(value)
app = Tk()
test_list = []
for i in range(10):
    test_list.append(Button(app,text=str(i+1),command=lambda : printmyvalue(i)))
    test_list[i].grid(row=i)
app.mainloop()
-1
user11019818 15 अप्रैल 2020, 03:51

1 उत्तर

सबसे बढ़िया उत्तर

यह समस्या कई बार थी - इसलिए आप इसे ढूंढ सकते हैं।

command=lambda args=i:printmyvalue(args)

आपके संस्करण में lambda:printmyvalue(i) i से कार्य करने के लिए lambda के मान को कॉपी नहीं करता है, लेकिन यह चर i द्वारा उपयोग की जाने वाली मेमोरी का संदर्भ रखता है। तो सभी बटनों को एक ही स्मृति के समान संदर्भ मिलता है। जब आप बटन पर क्लिक करते हैं तो उसे इस मेमोरी से मूल्य मिलता है लेकिन इस मेमोरी में लूप में उपयोग किया जाने वाला अंतिम मान होता है - इसलिए सभी बटन अंतिम मान का उपयोग करते हैं।

lambda args=i: का उपयोग करके यह प्रत्येक lamba में नया वेरिएबल args बनाता है और यह i से args - so everylambda` के मान को अलग-अलग वैल्यू के साथ अलग-अलग वेरिएबल का उपयोग करता है।

0
furas 15 अप्रैल 2020, 00:59