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

How do I create a menu in tkinter using a for loop?

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

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

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

command=lambda i=i: printindex(i)