我使用以下XML代码通过GtkBuilder生成GtkMenuBar:
<?xml version="1.0"?>
<interface>
<menu id="menubar">
<submenu id="submenu">
<attribute name="label">test</attribute>
<section>
<item>
<attribute name="label">random item</attribute>
</item>
</section>
</submenu>
</menu>
</interface>
当我需要在我的程序中引用它们时,菜单和子菜单都允许id
属性,我可以在gtk_builder_get_object
的调用中使用该属性,这样可行很好。
但是,对于item
,此类id
属性是不可能的,即将<item>
更改为<item id="myitem">
将导致错误
Gtk-ERROR **: failed to add UI: attribute 'id' invalid for element 'item'
但是,我需要在运行时更改此菜单项的标签,并希望以上述方式执行此操作。我怎样才能完成这个呢?
答案 0 :(得分:0)
这是一个简单的菜单栏,有一个菜单项(_File),一个子菜单有3个菜单项(2x ImageMenuItem和一个SeparatorMenuItem)。以下是使用Glade 3.19(Fedora 23)完成的,在解析了你的文件后,glade抱怨它的目标是Gtk + 2.12,即使文件上没有版本引用也是如此。如您所见,语法不同。
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.19.0 -->
<interface>
<requires lib="gtk+" version="3.16"/>
<object class="GtkMenuBar" id="menubar1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkMenuItem" id="menuitem1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">_File</property>
<property name="use_underline">True</property>
<child type="submenu">
<object class="GtkMenu" id="menu1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkImageMenuItem" id="imagemenuitem1">
<property name="label">gtk-new</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem" id="separatormenuitem1">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="imagemenuitem2">
<property name="label">gtk-quit</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
</interface>
您能否更多地了解您的设置和依赖关系?无论如何,建议升级到Gtk + 3.