Изменение метки 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.