2010-10-20 5 views
0

J'essaye d'ajouter un raccourci global à un gtk.MenuItem qui a un sous-menu.Comment sélectionner un MenuItem par programme

Voici mon code:

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

Lorsque j'appuie sur le menu de la touche apparaît, je peux alors sélectionner des éléments dans le sous-menu ou appuyez sur Echap pour faire disparaître. Mais après cela, le menuitem reste sélectionné et les autres fenêtres ne reçoivent plus le focus d'entrée. Je dois cliquer deux fois sur le menuitem pour que tout redevienne normal.

+0

Les réponses vont dans la boîte ci-dessous. –

+0

Terminé. Je ne savais pas si je devrais répondre à ma propre question :) – Shaung

Répondre

1

J'ai compris cela. MenuShell.select_item fera en sorte que le menuitem spécifié prenne le focus, mais après que la sélection à l'intérieur du menuitem soit terminée, il est nécessaire de dégrader explicitement le focus du clavier et de la souris. Donc, le code ressemble à:

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) 
Questions connexes