我正在使用TKinter Menu widet,并且我想将其他键盘键绑定到已绑定到其他键的系统事件。我的意思是,当执行以下代码段时,将显示一个简单菜单。当我按下“ Key-F10”键时,“文件”标签会突出显示,而当我按下“向上”或“向下”箭头中的任何一个时,菜单就会被突出显示(张贴)。至少这是Windows 8 OS上的行为。
我希望能够使用“向上”“向下”键的功能回调功能,使用“ <Key-F10>
”突出显示“ Space”键来扩展菜单。 “空格”要相同的绑定。但是,我找不到解决方法。我的代码显示如下。
from Tkinter import *
from tkFileDialog import askopenfilename
def popup(event):
filemenu.post(filemenu.winfo_rootx(), filemenu.winfo_rooty())
root = Tk()
menu = Menu(root)
root.config(menu=menu)
filemenu = Menu(menu)
menu.add_cascade(label="File", menu=filemenu)
filemenu.add_command(label="New")
filemenu.add_command(label="Open...")
filemenu.add_separator()
filemenu.add_command(label="Exit")
root.bind('<Button-3>', popup)
mainloop()
我自己可以找到的印刷品root.bind_all('<Key-F10>')
是:tk :: WinMenuKey%W%N ,这使我进入here,以下是定义:
*--------------------------------------------------------------
*
* TkWinMenuKeyObjCmd --
*
* This function is invoked when keys related to pulling down menus is
* pressed. The corresponding Windows events are generated and passed to
* DefWindowProc if appropriate. This cmd is registered as tk::WinMenuKey
* in the interp.
*
* Results:
* Always returns TCL_OK.
*
* Side effects:
* The menu system may take over and process user events for menu input.
*
*--------------------------------------------------------------
现在,我可以如何进行root.bind('<Key-Up>', tk::WinMenuKey)
的操作,以将Up键绑定到同一事件以拉出菜单。从我所看到的来看,这些事件并没有通过Tkinter.Menu.post/tk_popup
方法进行处理。
作为替代方案,我尝试在Muse按钮3的注册回调中使用filemenu.winfo_rootx()
,filemenu.winfo_rooty()
作为x,y坐标在Tkinter.Menu.post中进行坐标转换,但是菜单始终在左上方展开屏幕截图所示。当我使用filemenu.winfo_x()
,filemenu.winfo_y()
时,行为是相同的。