直接传递root.destroy时,Tkinter绑定无法正常工作

时间:2016-12-02 14:02:29

标签: python python-2.7 tkinter

我对python和tkinter相当新。我正在使用python 2.7和tkinter 8.5。

我按下退出键时试图退出我的应用程序,我遇到了一些奇怪的行为:

当我将root.destoy作为bind()的参数传递时,应用程序什么都不做:

root = Tk()
...
root.bind('<Escape>', root.destroy)

但是如果我定义一个调用root.destroy()并将其作为参数传递给bind的函数,那么一切都按预期工作:

def exit_app():
    root.destroy()
root.bind('<Escape>', exit_app)

如果我传递这样的lambda,它也有效:

root.bind('<Escape>', lambda f: root.destroy())

有人能解释一下这里发生了什么吗?

由于

1 个答案:

答案 0 :(得分:1)

将命令绑定到事件时,会向该命令传递一个参数,该参数是表示事件的对象。 root.destroy不接受任何参数,因此抛出错误而不是运行。

这就是你的lambda工作的原因:你的lambda接受一个参数(奇怪的是,名为f)。

您在问题中声称它适用于这个确切的函数定义:

def exit_app():
    root.destroy()

由于上述原因,我觉得无法相信。