更改GtkBuilder生成的菜单栏中的GtkMenuItem标签

时间:2017-04-18 19:20:59

标签: gtk gtk3 gtkbuilder

我使用以下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'

但是,我需要在运行时更改此菜单项的标签,并希望以上述方式执行此操作。我怎样才能完成这个呢?

1 个答案:

答案 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.