我正在尝试使用for循环向tkinter菜单添加多个编号的命令。当调用一个命令时,它的数字应该用作命令函数的参数。下面的代码不起作用,因为在调用命令之后,在循环结束后,对其进行评估。这意味着传递给Frime1的参数总是15,而我输入的是通过在命令标签上显示的数字。有什么办法可以做到这一点吗?
注:标签按预期工作,产生16个选项,标记为0至15。

newMenu = Menu(menuButtonInstance)
for i in range(16):
    newMenu.add_command(label = '%s'%i,
                        command = lambda:function1(i))
menuButtonInstance.config(menu = newMenu)

提前谢谢

最佳答案

一种常用的处理lambda的后期绑定的方法是给lambda一个参数,将默认值设置为更改变量:

    newMenu.add_command(label='{0}'.format(i),
                        command=lambda x=i: function1(x))

另一种可能是使用partialfromfunctools
    newMenu.add_command(label='{0}'.format(i),
                        command=partial(function1, i))

(注意PEP8建议在关键字参数中使用时不要在=的每一侧使用空格字符。另一方面,您应该在所有运算符周围放置空格字符,如示例中的%

10-02 06:51