加速器在 Python Tkinter 中不起作用:如何修复 [重复]
Posted
技术标签:
【中文标题】加速器在 Python Tkinter 中不起作用:如何修复 [重复]【英文标题】:Accelerators not working in Python Tkinter : How to fix [duplicate] 【发布时间】:2019-05-08 12:53:24 【问题描述】:我正在将加速器添加到 tkinter 的 TOPLEVEL 菜单栏中的按钮,用于我最近一直在从事的 python 项目,经过一些研究,我找到了一个解释如何完成此操作的网站。不幸的是,这不会激活该功能。
我一直想知道这是否是因为它绑定到按钮,而不是函数本身。
class Window:
def init_window(self):
menu = Menu(self.master)
self.master.config(menu=menu)
file = Menu(menu)
file.add_command(label="Exit", command=self.client_exit, accelerator="Ctrl+Q")
file.add_command(label="Save", command=self.save_file, accelerator="Ctrl+S")
file.add_command(label="Open...", command=self.open_file, accelerator="Ctrl+O")
menu.add_cascade(label="File", menu=file)
edit = Menu(menu)
edit.add_command(label="Undo", accelerator="Ctrl+Z")
edit.add_command(label="Redo", accelerator="Ctrl+Shift+Z")
menu.add_cascade(label="Edit", menu=edit)
view = Menu(menu)
view.add_command(label="Change Colors...", accelerator="Ctrl+Shift+C")
menu.add_cascade(label="View", menu=view)
很遗憾,加速器没有启动。我是 Python 新手,如果这个问题很简单,我很抱歉。
【问题讨论】:
command和bind_all的区别在于command
影响点击动作,而bind_all
检测热键
【参考方案1】:
你必须使用 bind_all。
Accelerator
只是一个将显示在菜单右侧的字符串
Underline
- 为所选索引加下划线
tearoff
- 用于切换撕下功能的布尔值
tearoff 允许您分离用于创建主窗口的菜单 浮动菜单。如果您创建一个菜单,您将在 当您单击顶部菜单项时。如果你点击那些虚线 菜单撕下并浮动。
from tkinter import *
def donothing(event=None):
filewin = Toplevel(root)
button = Button(filewin, text="Cool")
button.pack()
root = Tk()
menubar = Menu(root)
helpmenu = Menu(menubar, tearoff=0)
helpmenu.add_command(label="Help Index",accelerator="Ctrl+H", command=donothing)
menubar.add_cascade(label="Help",underline=0 ,menu=helpmenu)
root.config(menu=menubar)
root.bind_all("<Control-h>", donothing)
root.mainloop()
【讨论】:
以上是关于加速器在 Python Tkinter 中不起作用:如何修复 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
为啥 PyCharm tkinter GUI 在 macOS Monterey 12 更新中不起作用?
子进程似乎在 pyinstaller exe 文件中不起作用
我正在尝试在 Python Tkinter 中使用 os.system 触发一个新窗口,但它不起作用