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(),

Меню файла Tkinter всплыло в левом верхнем углу

0 ответов

Другие вопросы по тегам