3

<menu_item>.add_command()在 Tkinter 中,我们需要一个字符串作为参数来构建菜单栏,该字符串accelerator将为命令创建热键绑定。

我创建了一个方法,它检查用户的平台是 Mac 还是其他,如果是,则返回Command与其他键组合的键字符串。

但它不起作用->菜单正在构建,如果我点击菜单项它正在工作,但不能使用热键。虽然我可以看到⌘</kbd> + N in the menu..

我的第一个想法是,在self.hot_key()作为参数传递时不会调用该方法..

import sys
import Tkinter

class app(object):

    def __init__(self):
        self.gui = Tkinter.Tk()
        self.gui.minsize(width=640, height=320)
        menu = Tkinter.Menu(self.gui)
        filemenu = Tkinter.Menu(menu, tearoff=0)
        filemenu.add_command(
            label       = 'New',
            command     = self.New,
            accelerator = self.hot_key('n')
        )
        menu.add_cascade(
            label = 'File',
            menu  = filemenu
        )
        self.gui.config(menu=menu)

        self.text = Tkinter.Text(self.gui)
        self.text.pack(expand=Tkinter.YES, fill=Tkinter.BOTH)

    def hot_key(self, *keys):
        super_key = 'Command' if sys.platform == 'darwin' else 'Control'
        return '{super}+{keys}'.format(super=super_key, keys='+'.join(keys))

    def New(self):
        print "I'm working!"

App = app()
App.gui.mainloop()
4

1 回答 1

3

根据这个页面,

“加速器”选项用于指示应与该菜单关联的菜单加速器。这实际上并没有创建加速器,而只是显示它在菜单项旁边的内容。您仍然需要自己为加速器创建绑定。

因此,您的accelerator关键字参数按设计工作——Command-N 符号出现在您的菜单中。

正如 mgilson 在评论中建议的那样,您可以使用bind_all键盘组合来实际执行某些操作。

self.gui.bind_all("<Command-n>", lambda event: self.New())
于 2013-06-21T12:28:34.900 回答