TKINTER绑定在传递root.destroy时绑定不起作用



我是Python和Tkinter的新手。我正在使用Python 2.7和Tkinter 8.5。

当按下逃生键时,我正在尝试退出我的应用,我遇到了一些奇怪的行为:

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

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

但是,如果我定义一个调用root.destroy()的函数,并将其作为绑定的论点,则一切都按预期工作:

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

如果我通过这样的lambda,它也有效:

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

谁能解释这里发生的事情?

谢谢

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

这就是为什么您的lambda工作:您的lambda接受一个参数(奇怪的是,命名为 f)。

您在问题中声称它可以与此确切功能定义一起使用:

def exit_app():
    root.destroy()

我发现,由于上述相同的原因,我不可能相信。

最新更新