我正在尝试使用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))
另一种可能是使用
partial
fromfunctools
: newMenu.add_command(label='{0}'.format(i),
command=partial(function1, i))
(注意PEP8建议在关键字参数中使用时不要在
=
的每一侧使用空格字符。另一方面,您应该在所有运算符周围放置空格字符,如示例中的%
。