我是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()
我发现,由于上述相同的原因,我不可能相信。