繁体   English   中英

Tkinter绑定问题

[英]Tkinter bind problem

我有这样的事情:

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()

我的问题是:
“为什么总是被称为_quit() ?”

当您与Tkinter绑定时,通常不会调用您想要绑定的函数。

你应该使用这条线

root.bind('<Control-Q>', _quit) 

代替

root.bind('<Control-Q>', _quit())

注意_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()

编辑:

哎很抱歉,我只在菜单栏中运行了测试退出关键字命令的代码。 不是绑定的键命令。 在为Tkinter进行绑定时,我非常确定大多数GUI工具包,调用函数时的绑定插入和事件参数。 但是,Tkinter命令关键字参数不典型地插入事件。 所以你必须通过让命令关键字参数“人工”插入一个无参数的事件( lambda:_quit(None) )来妥协。 这允许您在两种方案中使用一个功能。

因为你在叫它。 别叫它:

root.bind('<Control-Q>', _quit)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM