gtk_box_pack_start和gtk_container_add有什么区别?

时间:2010-05-01 12:28:03

标签: c gtk

在我看来,这两个函数都可以用来向容器添加一些小部件。

有什么区别?

4 个答案:

答案 0 :(得分:3)

gtk_pack_start使您可以更好地控制子窗口小部件的分配空间。您可以控制子窗口小部件是否“扩展”(分配任何额外空间),“填充”(使用所有分配的空间或仅请求它们的最小空间)以及给予子项的填充量。因此,如果您的容器标识为GtkBox,则首选gtk_box_pack_start / gtk_box_pack_end,因为gtk_container_add可以使用,但使用的默认值在大多数情况下都不是最佳值。

答案 1 :(得分:2)

GtkBox比GtkContainer更靠近对象层次结构,即GtkBox将包装的概念添加到GtkContainer,GtkContainer为GtkWidgets添加了包含其他GtkWidgets的能力。

简而言之,GtkBox让您可以更好地控制所包含小部件的布局。

因此,如果您需要更多控件,请使用gtk_box_pack_start打包小部件,例如在hbox中添加多个对齐的组合框,否则请使用gtk_container_add,例如向窗口添加框架。

http://library.gnome.org/devel/gtk/stable/GtkContainer.html#GtkContainer.description

http://library.gnome.org/devel/gtk/stable/GtkBox.html#GtkBox.description

答案 2 :(得分:2)

在GtkBox上,以下伪代码是等效的:

gtk_container_add(box, widget)
gtk_box_pack_start(box, widget, default_expand, default_expand, 0)

http://git.gnome.org/browse/gtk+/tree/gtk/gtkbox.c#n1665

答案 3 :(得分:1)

gtk_container将小部件添加到容器中(顺便说一下,许多小部件可以是容器),并且gtk_box_pack_start用于在一些称为框的虚拟实体中打包小部件,这些虚拟实体也是小部件。添加只是根据一些预定义的规则将它们放入容器中,在包装中你告诉如何添加小部件,然后将这些安排的小部件添加到容器中。