tkinter Button 命令在迭代中不能正常工作
tkinter Button command doesn't work properly in iteration
我正在制作 GUI 并且在用于清除输入值的按钮命令上有一些问题。当我在第一个条目中输入一个值并尝试单击第一个按钮时,该值不会被删除,应该被清除,同第3个按钮的第2个button.But一样,可以清除第3个输入的值,第1个,第2个按钮也可以擦除第3个entry.I的值要第一个进入第一个按钮并且可以擦除数据。我的代码有什么问题。我应该如何修改它。非常感谢您的帮助。
这是我的代码:
from tkinter import *
root = Tk()
screenwidth = root.winfo_screenwidth()
screenheight = root.winfo_screenheight()
root.title('PN List Box')
root.geometry("500x300+%d+%d"%((screenwidth-400)/2,(screenheight-230)/2-100))
mycolor = '#%02x%02x%02x' % (101, 119, 141)
root.configure(bg=mycolor)
cv = Canvas(root,bg=mycolor)
dict1={}
dict2={}
list1=[]
label_rely=0
for a in range(3):
label_rely+=0.1
list1.append(StringVar())
dict1[a]=Entry(root,textvariable=list1[a]).place(relx=0.27, rely=0.33 + label_rely)
dict2[a]= Button(root,text='clear',command=lambda :list1[a].set('')).place(relx=0.86,rely=0.32+label_rely)
root.mainloop()
sys.exit()
这是 Python 的一个棘手的小角落。请记住,在实际执行 lambda 之前,不会评估您的 lambda 函数。在执行 lambda 时,对于所有三个回调,a
的值为 2
。您需要做的是通过将循环值作为默认参数传递给函数来“捕获”循环值:
dict2[a]= Button(root,text='clear',command=lambda a=a :list1[a].set('')).place(relx=0.86,rely=0.32+label_rely)
我正在制作 GUI 并且在用于清除输入值的按钮命令上有一些问题。当我在第一个条目中输入一个值并尝试单击第一个按钮时,该值不会被删除,应该被清除,同第3个按钮的第2个button.But一样,可以清除第3个输入的值,第1个,第2个按钮也可以擦除第3个entry.I的值要第一个进入第一个按钮并且可以擦除数据。我的代码有什么问题。我应该如何修改它。非常感谢您的帮助。 这是我的代码:
from tkinter import *
root = Tk()
screenwidth = root.winfo_screenwidth()
screenheight = root.winfo_screenheight()
root.title('PN List Box')
root.geometry("500x300+%d+%d"%((screenwidth-400)/2,(screenheight-230)/2-100))
mycolor = '#%02x%02x%02x' % (101, 119, 141)
root.configure(bg=mycolor)
cv = Canvas(root,bg=mycolor)
dict1={}
dict2={}
list1=[]
label_rely=0
for a in range(3):
label_rely+=0.1
list1.append(StringVar())
dict1[a]=Entry(root,textvariable=list1[a]).place(relx=0.27, rely=0.33 + label_rely)
dict2[a]= Button(root,text='clear',command=lambda :list1[a].set('')).place(relx=0.86,rely=0.32+label_rely)
root.mainloop()
sys.exit()
这是 Python 的一个棘手的小角落。请记住,在实际执行 lambda 之前,不会评估您的 lambda 函数。在执行 lambda 时,对于所有三个回调,a
的值为 2
。您需要做的是通过将循环值作为默认参数传递给函数来“捕获”循环值:
dict2[a]= Button(root,text='clear',command=lambda a=a :list1[a].set('')).place(relx=0.86,rely=0.32+label_rely)