Python Tkinter встраивается в системные привязки
Я использую расширенное меню TKinter, и я хочу привязать дополнительную клавиатуру к системному событию, уже привязанному к другим клавишам. Я имею в виду, когда ниже приведен фрагмент кода, отображается простое меню. Когда я нажимаю клавишу "F10", метка "Файл" подсвечивается, а когда я нажимаю любую из стрелок "Вверх" или "Вниз", меню расширяется (публикуется). Это как минимум поведение в ОС Windows 8.
Я хочу иметь возможность расширять меню клавишей "Пробел", когда оно выделено<Key-F10>
', используя функциональный обратный вызов, который для клавиш "Вверх" и "Вниз" - своего рода привязка "Пробел" к той же привязке. Однако я не могу найти, как это сделать. Мой код показан ниже.
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>')
is : tk:: WinMenuKey% W% N, что приводит меня сюда, где определено следующее:
*--------------------------------------------------------------
*
* 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)
привязать клавишу "Вверх" к тому же событию для перетягивания меню. Из того, что я видел, эти события не проходят через Tkinter.Menu.post/tk_popup
методы.
В качестве альтернативы я попытался Tkinter.Menu.post в моем зарегистрированном обратном вызове для кнопки Muse 3 с filemenu.winfo_rootx()
, filemenu.winfo_rooty()
как x, y координаты, однако меню всегда расширяется в верхней левой части экрана, как показано на скриншоте. Поведение такое же, когда я использую filemenu.winfo_x()
, filemenu.winfo_y()
,