我试图使用for循环将多个编号的命令添加到Tkinter菜单.当调用命令时,它的编号应该用作命令函数的参数.以下代码不起作用,因为在调用命令时评估i,即在循环完成之后.这意味着传递给function1的参数始终为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))
另一种可能性是使用functools中的partial:
newMenu.add_command(label='{0}'.format(i),
command=partial(function1, i))
(注意,PEP8建议在关键字参数中使用时不要在=的每一边使用空格字符.另一方面,你应该在所有运算符周围加上空格字符,例如你的例子中的%)
标签:python
来源: https://codeday.me/bug/20190626/1289965.html