我对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())
有人能解释一下这里发生了什么吗?
由于
答案 0 :(得分:1)
将命令绑定到事件时,会向该命令传递一个参数,该参数是表示事件的对象。 root.destroy
不接受任何参数,因此抛出错误而不是运行。
这就是你的lambda工作的原因:你的lambda接受一个参数(奇怪的是,名为f
)。
您在问题中声称它适用于这个确切的函数定义:
def exit_app():
root.destroy()
由于上述原因,我觉得无法相信。