Sau*_*igh 3 python bind menu tkinter
我有这样的事情:
from Tkinter import *
root = Tk()
root.title("Test")
def _quit():
root.destroy()
m = Menu(root)
root.config(menu=m)
fm = Menu(m, tearoff=0)
m.add_cascade(label="File", menu=fm)
fm.add_command(label="Quit", command=_quit, accelerator='Ctrl+Q')
root.bind('<Control-Q>', _quit())
root.bind('<Control-q>', _quit())
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
我的问题是:
"为什么_quit()总是被召唤?"
当您与Tkinter绑定时,通常不会调用您想要绑定的函数.
你应该使用这条线
root.bind('<Control-Q>', _quit)
Run Code Online (Sandbox Code Playgroud)
代替
root.bind('<Control-Q>', _quit())
Run Code Online (Sandbox Code Playgroud)
注意_quit背后缺少括号.
以下代码应该有效.
from Tkinter import *
root = Tk()
root.title("Test")
def _quit(event):
root.destroy()
m = Menu(root)
root.config(menu=m)
fm = Menu(m, tearoff=0)
m.add_cascade(label="File", menu=fm)
fm.add_command(label="Quit", command=lambda: _quit(None), accelerator='Ctrl+Q')
root.bind('<Control-Q>', _quit)
root.bind('<Control-q>', _quit)
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
编辑:
哎很抱歉,我只在菜单栏中运行了测试quit关键字命令的代码.不是绑定的键命令.在为Tkinter进行绑定时,我非常确定大多数GUI工具包,调用函数时的绑定插入和事件参数.但是,Tkinter命令关键字参数不典型地插入事件.所以你必须通过让命令关键字参数"人工"插入一个无参数的事件(lambda:_quit(None))来妥协.这允许您在两种方案中使用一个功能.