加速器在 Python Tkinter 中不工作:如何修复

Accelerators not working in Python Tkinter : How to fix

我正在将加速器添加到 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 的新手,很抱歉这个问题很简单。

你必须使用 bind_all。

Accelerator只是一个字符串,将显示在菜单的右侧

Underline - 为所选索引加下划线

tearoff - 切换撕下功能的布尔值

tearoff allows you to detach menus for the main window creating floating menus. If you create a menu you will see dotted lines at the top when you click a top menu item. If you click those dotted lines the menu tears off and becomes floating.

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