Кнопка меню в приложении Gtk3 Vala

Я пытаюсь сделать приложение Gtk3 с помощью vala.

Я использую ui-файл для дизайна интерфейса. Я не могу найти информацию о том, как сделать это GMenu (?) с файлом пользовательского интерфейса. Есть много примеров для кодирования этого в vala.

Как я могу добавить эту кнопку меню в свой файл пользовательского интерфейса?

Полный код можно найти на github.com.

Мне нужен этот тип меню для моего приложения: Скриншот ожидаемой кнопки меню Единственное, что я могу сделать, это следующее: Скриншот фактической кнопки меню

Это мой пользовательский интерфейс:

<?xml version="1.0" encoding="UTF-8"?>
<interface>
  <object class="GtkPopoverMenu" id="popovermenu1">
    <property name="can_focus">False</property>
      <child>
        <placeholder />
      </child>
  </object>

  <template class="ZeiterfassunggtkWindow" parent="GtkApplicationWindow">
    <property name="default-width">600</property>
    <property name="default-height">300</property>
    <child type="titlebar">
      <object class="GtkHeaderBar" id="header_bar">
        <property name="visible">True</property>
        <property name="show-close-button">True</property>
        <property name="title">Zeiterfassung</property>
        <property name="subtitle">Precisma GmbH</property>
        <child>
          <object class="GtkMenuButton">
            <property name="visible">True</property>
            <property name="can_focus">True</property>
            <property name="receives_default">True</property>
            <property name="popover">popovermenu1</property>
            <child>
              <placeholder />
            </child>
          </object>
          <packing>
            <property name="pack_type">end</property>
          </packing>
        </child>
      </object>
    </child>
    <child>
      <object class="GtkLabel" id="label">
        <property name="label">Hello, World!</property>
        <property name="visible">True</property>
        <attributes>
          <attribute name="weight" value="bold"/>
          <attribute name="scale" value="2"/>
        </attributes>
      </object>
    </child>
  </template>
</interface>

Решение. Нашел ответ с помощью Йенса:

Мне пришлось добавить значок как GtkImage внизу шаблона после </template>

<object class="GtkImage" id="menu_image">
  <property name="visible">True</property>
  <property name="icon_name">open-menu-symbolic</property>
</object>

Затем используйте этот GtkImage для кнопки:

      <object class="GtkMenuButton">
        <property name="visible">True</property>
        <property name="can_focus">True</property>
        <property name="receives_default">True</property>
        <property name="popover">popovermenu1</property>
        <property name="image">menu_image</property>
        <child>
          <placeholder />
        </child>
      </object>

person Gerald Zehetner    schedule 28.08.2018    source источник


Ответы (1)


Это Gtk.MenuButton с use_popover = True, см. исходный код gedit здесь:

https://gitlab.gnome.org/GNOME/gedit/blob/master/gedit/resources/ui/gedit-window.ui#L93

<object class="GtkMenuButton" id="gear_button">
  <property name="visible">True</property>
  <property name="valign">center</property>
  <property name="use_popover">True</property>
  <property name="image">menu_image</property>
</object>
<packing>
  <property name="pack_type">end</property>
</packing>

Также обратите внимание, что кнопка находится внутри компонента Gtk.HeaderBar.

person Jens Mühlenhoff    schedule 28.08.2018
comment
ХОРОШО. Спасибо. Никогда не думал заглядывать в исходники gedit ;). Мне не хватало только значка. Нашел в исходниках gedit. Спасибо. - person Gerald Zehetner; 28.08.2018
comment
Конечно, я даже не видел свойство изображения, рад, что вы его нашли. - person Jens Mühlenhoff; 28.08.2018