2010-10-20 139 views
0

我想添加一個全局快捷方式到一個gtk.MenuItem它有一個子菜單。如何以編程方式選擇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鍵項,使之消失。 但之後,menuitem保持選定狀態,其他窗口再也不會獲得輸入焦點。我必須點擊菜單項兩次才能恢復正常。

+0

答案在下面的框中輸入。 – 2010-12-30 04:38:10

+0

完成。我只是不確定我是否應該回答我自己的問題:) – Shaung 2010-12-30 04:45:47

回答

1

我想通了。 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) 
相關問題