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