如何使用 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)
我想在 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)