在Tkinter中,使用
我创建了一个方法,检查用户的平台是否为Mac或其他平台,如果是,则返回与其他键组合的
但它不起作用->菜单正在构建中,如果我点击菜单项,它可以工作,但热键不能工作。尽管我可以在菜单中看到⌘ + N。
我的第一个想法是,传递作为参数时未调用
<menu_item>.add_command()
构建菜单栏时,需要为accelerator
参数提供一个字符串,该字符串将创建命令的快捷键绑定。我创建了一个方法,检查用户的平台是否为Mac或其他平台,如果是,则返回与其他键组合的
Command
键字符串。但它不起作用->菜单正在构建中,如果我点击菜单项,它可以工作,但热键不能工作。尽管我可以在菜单中看到⌘ + 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()
self.gui.bind_all(...)
,但这可能会更加丑陋和不可靠。 - mgilsonbind
或bind_all
将键盘事件绑定到一个方法上,accelerator
只会在菜单中显示热键。所以你的版本并不丑陋或者是hacky,那是正确的做法。 - Peter Varo