Как прикрепить компонент к определенной строке 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 ответ
Решение
Есть несколько решений вашей проблемы:
- Контейнеры хранят свои детские упаковочные свойства (такие вещи, как
expand
а такжеfill
и, как вы уже догадались,position
). Ты можешь использоватьcontainer_widget.child_set_property(child_widget, 'position', index)
изменить положение дочернего виджета. - Используйте Сетка вместо Коробки. Вы можете выбрать, где добавить дочерний виджет, если вы используете
grid.attach
метод, или добавить виджеты, как если бы это был Box (потому что оба наследуют от GtkContainer). - Вместо того, чтобы оставлять место пустым, вставьте другой (невидимый) контейнерный виджет. Таким образом, вы можете легко добавлять дочерние виджеты без необходимости жестко кодировать их положение в поле.