如何使用for循环在tkinter中创建菜单?

时间:2019-04-12 01:18:28

标签: python tkinter menu

我想在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。

我希望菜单中的所有项目都指向相同的功能,但要传递各自的值。我该怎么办?

1 个答案:

答案 0 :(得分:1)

调用函数时会查询闭包中使用的变量的值,在您的情况下,i的值为9。您可以修改lambda函数以强制执行闭包:

command=lambda i=i: printindex(i)