如何在 GtkBox 的特定行中附加组件?

How to attach a component in a specific line of GtkBox?

我用 Glade 创建了一个 GtkBox,我在 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

attach

您的问题有多种解决方案:

  1. 容器存储其子项的包装属性(例如 expandfill,您猜对了,position)。您可以使用 container_widget.child_set_property(child_widget, 'position', index) 更改子窗口小部件的位置。
  2. 使用网格而不是方框。如果您使用 grid.attach 方法,您可以选择在何处添加子部件,或者将部件作为一个 Box 添加(因为它们都继承自 GtkContainer)。
  3. 不要让这个地方空着,而是插入另一个(不可见的)容器小部件。通过这种方式,您可以轻松添加子小部件,而无需对它们在框中的位置进行硬编码。