在Tkinter中使用<menu_item>.add_command()
构造菜单栏时,我们需要一个accelerator
参数的字符串,它将为命令创建热键绑定。
我创建了一个方法,检查用户的平台是Mac还是其他平台,如果是,则返回Command
密钥字符串与其他密钥组合。
但它不起作用 - &gt;菜单正在构建,如果我点击它正在工作的菜单项,但不使用热键。虽然我可以在菜单中看到⌘ + N ..
我的第一个想法是,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()
答案 0 :(得分:3)
根据this页面,
“加速器”选项用于指示菜单加速器 应该与此菜单相关联。这实际上并没有创建 加速器,但仅显示菜单项旁边的内容。您 仍然需要自己为加速器创建一个绑定。
因此,您的accelerator
关键字参数按设计运行 - 命令N符号出现在菜单中。
正如mgilson在评论中建议的那样,您可以使用bind_all
让键盘组合实际执行某些操作。
self.gui.bind_all("<Command-n>", lambda event: self.New())