加速器在 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 文件中不起作用

Ctrl-C / Ctrl-V在VB6中不起作用

我正在尝试在 Python Tkinter 中使用 os.system 触发一个新窗口,但它不起作用

在 Suse Linux Server 11.3 上安装 Python 2.7.2 找不到 tkinter 依赖项

在另一个模块中调用时,tkinter 组合框功能不起作用