ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python – Tkinter绑定问题

2019-07-15 00:55:26  阅读:194  来源: 互联网

标签:python bind tkinter menu


我有这样的事情:

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))来妥协.这允许您在两种方案中使用一个功能.

标签:python,bind,tkinter,menu
来源: https://codeday.me/bug/20190715/1462742.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有