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