Tkinter 菜单命令目标函数带参数?

Tkinter Menu command targets function with arguments?

我想知道,我如何制作一个 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)

命令将一个函数作为参数,但当使用参数 "spam" 调用时,foo("spam") 给出 foo 的 return 值。作为解决方案,您可以使用调用 foo("spam") 作为参数的匿名函数:

command=lambda: foo("spam")

对于这类东西,尤其是事件处理程序和命令,一个优雅的解决方案是使用 functools 模块的 partial() 方法。

from functools import partial
...
command=partial(foo, "spam")

Partial 据说比使用 lambda 更快:Differences between functools.partial and a similar lambda?