我想在tkinter中创建一个菜单,该菜单列出csv文件中的名称。我正在使用lambda函数,但无法弄清楚如何使按钮做不同的事情。由于它们是最后创建的,所以它们都与最后一个执行相同的操作。这是一些代码来演示:
from tkinter import *
def printindex(x):
print(x)
root = Tk()
menu = Menu(root)
file = Menu(menu)
for i in range(10):
file.add_command(label=str(i), command=lambda: printindex(i))
menu.add_cascade(label="File", menu=file)
root.config(menu=menu)
root.mainloop()
运行此命令时,菜单中的所有选项都会打印9。
我希望菜单中的所有项目都指向相同的功能,但要传递各自的值。我该怎么办?
答案 0 :(得分:1)
调用函数时会查询闭包中使用的变量的值,在您的情况下,i
的值为9。您可以修改lambda函数以强制执行闭包:
command=lambda i=i: printindex(i)