Как прикрепить компонент к определенной строке GtkBox?

Я создал GtkBox с Glade, я добавил некоторые компоненты в начале и в конце GtkBox и оставил пустую строку в середине. Теперь, как мне добавить новый компонент в пустую строку через код? Например:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.18.3 -->
<interface>
  <requires lib="gtk+" version="3.12"/>
  <object class="GtkWindow" id="window1">
    <property name="can_focus">False</property>
    <child>
      <object class="GtkBox" id="box1">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <property name="orientation">vertical</property>
        <child>
          <object class="GtkButton" id="button1">
            <property name="label" translatable="yes">button</property>
            <property name="visible">True</property>
            <property name="can_focus">True</property>
            <property name="receives_default">True</property>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">True</property>
            <property name="position">0</property>
          </packing>
        </child>
        <child>
          <placeholder/>
        </child>
        <child>
          <object class="GtkEntry" id="entry1">
            <property name="visible">True</property>
            <property name="can_focus">True</property>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">True</property>
            <property name="position">2</property>
          </packing>
        </child>
      </object>
    </child>
  </object>
</interface>

Как добавить компонент в положение один из GtkBoxчерез код?

РЕДАКТИРОВАТЬ: видимо GtkBox не имеет метода, как прикрепление GtkGrid

1 ответ

Решение

Есть несколько решений вашей проблемы:

  1. Контейнеры хранят свои детские упаковочные свойства (такие вещи, как expand а также fill и, как вы уже догадались, position). Ты можешь использовать container_widget.child_set_property(child_widget, 'position', index) изменить положение дочернего виджета.
  2. Используйте Сетка вместо Коробки. Вы можете выбрать, где добавить дочерний виджет, если вы используете grid.attach метод, или добавить виджеты, как если бы это был Box (потому что оба наследуют от GtkContainer).
  3. Вместо того, чтобы оставлять место пустым, вставьте другой (невидимый) контейнерный виджет. Таким образом, вы можете легко добавлять дочерние виджеты без необходимости жестко кодировать их положение в поле.
Другие вопросы по тегам