Python Tkinter搭载系统绑定

时间:2018-07-20 07:30:31

标签: python tkinter widget tkinter-menu

我正在使用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()时,行为是相同的。

Tkinter file menu poped at top left corner

0 个答案:

没有答案