我想知道,我如何创建一个Tkinter(在Python中)菜单,该菜单以带有参数的函数为目标,例如foo("what")
?
def foo(arg):
print "Foo, %s." % arg
popup = Menu()
popup.add_command(label="Spam!", command=foo("spam")) # Doesn't work.
popup.add_command(label="Turkey!", command=foo("turkey")) # Doesn't work.
popup.post(50, 50)
答案 0 :(得分:8)
Command将函数作为参数,但foo("spam")
在使用参数foo
调用时返回"spam"
的返回值。作为解决方案,您可以使用匿名函数调用foo("spam")
作为参数:
command=lambda: foo("spam")
答案 1 :(得分:4)
对于这类内容,尤其是事件处理程序和命令,一个优雅的解决方案是使用functools
模块的partial()
方法。
from functools import partial
...
command=partial(foo, "spam")
部分据说比使用lambda更快:Differences between functools.partial and a similar lambda?