如果我们希望窗口里多放添加几个控件,直接添加是不成功的,因为窗口只能容纳一个控件的容器。这时候,我们需要借助布局容器,我们先把布局容器添加到窗口里,然后再把所需要添加的控件放在布局容器里。

布局容器的主要分类:

  • 水平布局( GtkHBox )
  • 垂直布局( GtkVBox )
  • 表格布局( GtkTable )
  • 固定布局( GtkFixed )

水平布局容器:

水平布局容器的创建:

GtkWidget *gtk_hbox_new( gboolean homogeneous,
                            gint spacing );

homogeneous:容器内控件是否大小一致( gboolean 取值为TRUE 或 FALSE )
spacing:控件之间的间隔( 以像素点为单位 ),gint相当于 C语言的int
返回值:水平布局控件指针

容器添加添加控件:

void gtk_container_add(GtkContainer *container, 
                        GtkWidget *widget);

container:容纳控件的容器
widget:要添加的控件

显示容器上所有控件:

void gtk_widget_show_all(GtkWidget *widget);

widget:需要显示的控件

完整代码如下:

#include <gtk/gtk.h>    // 头文件

int main(int argc, char *argv[]) 
{ 
    gtk_init(&argc, &argv);     // 初始化

    GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);         // 创建窗口

    // 创建水平布局容器
    GtkWidget *hbox = gtk_hbox_new(TRUE, 10); 
    // 把容器添加到窗口
    gtk_container_add(GTK_CONTAINER(window), hbox); 

    // button1
    GtkWidget *button = gtk_button_new_with_label("button1");
    gtk_container_add(GTK_CONTAINER(hbox), button); // 按钮添加到水平布局容器里

    // button2
    button = gtk_button_new_with_label("button2");
    gtk_container_add(GTK_CONTAINER(hbox), button); // 按钮添加到水平布局容器里

    // button3
    button = gtk_button_new_with_label("button3");
    gtk_container_add(GTK_CONTAINER(hbox), button); // 按钮添加到水平布局容器里

    gtk_widget_show_all(window); // 显示所有控件

    gtk_main();     // 主事件循环

    return 0; 
} 

程序运行效果图,如下:

08_布局容器之水平布局 - 图1