2012-04-28 17 views
0

在我的小型PyGObject/GTK3應用程序中,我嘗試創建一個由(RadioMenuItem)組成的(子)菜單。在包含RadioMenuItems的菜單中錯誤地選擇了多個項目

我創建菜單作爲主窗口的__init__在如下:當我打開菜單,第一次,菜單使用

def button_press(self, widget, event, data=None): 
    for i in range(1,5): 
     self.menu_items[i].set_active(False) 
    self.menu_items[2].set_active(True) 
    self.menu.popup(None, None, None, None, 
          event.button, event.time) 

menu_item = None 
self.menu = Gtk.Menu() 
self.menu_items = {} 
for i in range(1,5): 
    menu_item = Gtk.RadioMenuItem(menu_item) 
    menu_item.set_label(str(i)) 
    self.menu_items[i] = menu_item 
    self.menu.append(self.menu_items[i]) 
    self.menu_items[i].connect("activate", 
         self.on_menu_select, 
         i) 
    self.menu_items[i].show() 

,然後顯示它在button_press_event處理程序項目「2」正確地是唯一被選中的項目。 當我那時 - 例如 - 選擇菜單項「3」並再次打開菜單時,菜單項2和3都被選中。我究竟做錯了什麼?

回答

1

你必須把收音機菜單項目組中的對方,否則當選擇另外一個,他們將不知道自己取消:

self.menu = Gtk.Menu() 
self.menu_items = list() 
group = [] 
for i in range(1,5): 
    menu_item = Gtk.RadioMenuItem.new_with_label(group, str(i)) 
    group = menu_item.get_group() 
    self.menu_items[i] = menu_item 
    self.menu.append(menu_item) 
    menu_item.connect("activate", self.on_menu_select, i) 
    menu_item.show() 

self.menu_items[2].set_active(True) 

請注意,此行選擇的項目編號2 ,你不必自己動手,所以你的按鈕按壓處理器可以簡單地:

def button_press(self, widget, event, data=None): 
    self.menu.popup(None, None, None, None, 
        event.button, event.time) 
+0

謝謝,這解決了我的問題。我以爲我通過使用menu_item = Gtk.RadioMenuItem(menu_item)將舊的menu_item傳遞到新的構造函數中來將它們放入同一組中,但顯然我讀錯了文檔。謝謝! – gnirx 2012-04-29 12:36:10

相關問題