在Tkinter中为<menu_item>.add_command()
构建菜单栏我们需要一个字符串作为accelerator
参数,它将为命令创建热键绑定。在Tkinter中如何传递一个被调用的函数作为参数?
我创建了一个方法,它检查用户的平台是否是Mac或其他,如果是,则返回Command
键字符串与其他键组合。
但它不起作用 - >正在建立菜单,如果我点击它正在工作的菜单项,但不能使用热键。虽然我可以看到在菜单中⌘ + ň ..
我首先想到的是,虽然作为参数传递的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()
FWIW,我从来没有用过这个加速器的东西。我总是只是'self.gui.bind_all(...)',但这可能更丑陋和黑客。 – mgilson
事实证明,我不得不使用'bind'或'bind_all'来将键盘事件绑定到一个方法上,'accelerator'只在菜单中显示热键。所以你的版本不是丑陋或者是黑客,那是正确的做法.. –
很高兴知道。今天早上我学到了一些东西:) – mgilson