Tkinter Menu命令以参数为目标函数?

Aqu*_*ing 3 python command tk-toolkit tkinter

我想知道,我如何制作一个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)
Run Code Online (Sandbox Code Playgroud)

fhd*_*sdg 9

Command接受一个函数作为参数,但foo("spam")给出了foo使用参数调用时的返回值"spam".作为解决方案,您可以使用匿名函数foo("spam")作为参数调用:

command=lambda: foo("spam")
Run Code Online (Sandbox Code Playgroud)


kar*_*kg3 6

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

from functools import partial
...
command=partial(foo, "spam")
Run Code Online (Sandbox Code Playgroud)

据说Partial比使用lambda更快:functools.partial和类似的lambda之间的区别?