Изменение метки GtkMenuItem в строке меню, созданной GtkBuilder

У меня есть следующий код XML, который я использую для генерации GtkMenuBar с помощью 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'

Однако мне нужно изменить метку этого пункта меню во время выполнения, и я надеялся сделать это так, как я описал выше. Как я могу сделать это вместо этого?

1 ответ

Это простая строка меню с одним элементом меню (_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.

Другие вопросы по тегам