1

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

但是,我需要在运行时更改此菜单项的标签,并希望按照我上面描述的方式进行。我怎样才能做到这一点?

4

1 回答 1

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。

于 2017-04-19T10:01:55.297 回答