我正在制作 GUI 并且在用于清除输入值的按钮命令上有一些问题。当我在第一个条目中输入一个值并尝试单击第一个按钮时,该值没有被擦除,应该被清除, 与第二个按钮相同。但是对于第三个按钮,它可以清除第三个输入值,并且第一个、第二个按钮也可以擦除第三个条目的值。我希望第一个条目到第一个按钮并且可以擦除数据。什么是我的代码有问题。我应该如何修改它。非常感谢您的帮助。 这是我的代码:
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()
答案 0 :(得分:0)
这是 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)