2017-04-18 72 views
1
生成的菜单栏的GtkMenuItem标签

我有用于生成通过GtkBuilder的手段GtkMenuBar以下XML代码:改变在通过GtkBuilder

<?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

您是使用Glade还是手动编写XML? – theGtknerd

回答

0

这是一个简单的菜单栏,有一个菜单项(_File),一个子菜单有3个菜单项(2个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.