Как выбрать MenuItem программно - PullRequest
0 голосов
/ 20 октября 2010

Я пытаюсь добавить глобальный ярлык к gtk.MenuItem, у которого есть подменю.

Вот мой код:

import pygtk, gtk
import keybinder

dlg = gtk.Dialog('menu test')
dlg.set_size_request(200, 40)

menubar = gtk.MenuBar()
menubar.show()
menuitem = gtk.MenuItem('foo')
menuitem.show()
menubar.append(menuitem)

mitem = gtk.MenuItem('bar')
mitem.show()
menu = gtk.Menu()
menu.add(mitem)
menu.show()
menuitem.set_submenu(menu)

def show_menu_cb():
    menubar.select_item(menuitem)

keybinder.bind('<Super>i', show_menu_cb)

dlg.vbox.pack_start(menubar)
dlg.show()
dlg.run()

Когда я нажимаю клавишу, появляется менюЗатем я могу выбрать элементы в подменю или нажать клавишу Esc, чтобы он исчез.Но после этого пункт меню остается выбранным, и другие окна никогда не получают фокус ввода снова.Я должен дважды щелкнуть пункт меню, чтобы вернуть все в нормальное состояние.

1 Ответ

1 голос
/ 30 декабря 2010

Я понял это.MenuShell.select_item заставит указанный пункт меню захватить фокус, но после того, как выбор внутри элемента меню будет сделан, необходимо явно убрать фокус клавиатуры и мыши.Так выглядит код:

def on_done(w, *args):
    gtk.gdk.keyboard_ungrab()
    gtk.gdk.pointer_ungrab()

def show_menu_cb():
    menubar.connect('cancel', on_done)
    menubar.connect('selection-done', on_done)
    menubar.select_item(menuitem)
...