在由RadioMenuItems组成的菜单中(错误地)选择了多个项目

时间:2012-04-28 21:11:38

标签: python pygtk gtk3 pygobject

在我的小型PyGObject / GTK3应用程序中,我尝试创建一个由RadioMenuItem组成的(子)菜单。

我在主窗口的__init__

中创建如下菜单
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处理程序中显示它
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)

当我第一次打开菜单时,菜单项“2”正确是唯一选择的菜单。 当我然后 - 例如 - 选择菜单项“3”并再次打开菜单时,选择菜单项2和3。我做错了什么?

1 个答案:

答案 0 :(得分: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)