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

2024-07-03 07:35:33 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的小PyGObject/GTK3应用程序中,我尝试创建一个包含RadioMenuItems的(子)菜单

我在主窗口的__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处理程序中使用

^{pr2}$

当我第一次打开菜单时,菜单项“2”正确地被选中。 例如,当我选择菜单项“3”并再次打开菜单时,菜单项2和3都被选中。我做错什么了?在


Tags: selfnone应用程序gtkforinit菜单items
1条回答
网友
1楼 · 发布于 2024-07-03 07:35:33

您必须将单选菜单项彼此放在一个组中,否则当选择另一个选项时,它们将不知道如何取消选择:

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项,您不必亲自执行,因此您的按钮按下处理程序可以是:

^{pr2}$

相关问题 更多 >