将子菜单附加/克隆到多个菜单项

时间:2016-07-20 22:11:25

标签: python menu gtk submenu

所以我有一个基本的菜单结构:

menu = gtk.menu()
item1 = gtk.MenuItem('Item 1')
item2 = gtk.MenuItem('Item 2')
menu.append(item1)
menu.append(item2)`
menu.show_all()

我有一个子菜单:

submenu = gtk.menu()
subitem1 = gtk.MenuItem('Option 1')
subitem2 = gtk.MenuItem('Option 2')
submenu.append(subitem1)
submenu.append(subitem2)
submenu.show_all()

现在我想将这个相同的子菜单结构附加到两个顶级菜单项。我的第一个想法是,只需向.set_submenu(submenu)item1添加item2即可,但它会给我错误:

Gtk-WARNING **: gtk_menu_attach_to_widget(): menu already attached to GtkMenuItem

并且子菜单仅显示附加到的最后一个项目。

在实践中,我有两个以上的顶级项目,我需要为大多数项目添加相同的子菜单结构。因此,为每个项目定义相同的子菜单结构实际上并不是一种选择。这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

当您在终端上发出的警告指定时,您无法将相同的GtkMenu实例附加到不同的菜单 - 就像您无法将相同的小部件添加到多个容器一样。

如果您发现需要在多个位置使用相同的子菜单,您的菜单层次结构似乎过于复杂;毫无疑问,用户会依赖位置记忆来查找分层菜单结构中的动作。

在任何情况下,如果您仍想重复菜单,您可以使用简单的菜单工厂"函数,并从菜单的常见GtkBuilder XML描述中生成多个实例。