2017-04-18 31 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.