没事儿找事儿————gtk学习(用盒状容器排列控件)

来源:互联网 发布:linux中断机制 编辑:程序博客网 时间:2024/05/21 17:52

        盒状容器只能容纳一行或者一列控件,可以向盒状容器中再添加盒状容器。还可以用格状容器控件(GtkTable)。格状容器是一种能容纳多行多列且简单易用的容器,它提供了坐标方式表示控件所要摆放的空间的方式。

#include<gtk/gtk.h>int main(int argc,char**argv){GtkWidget* window;GtkWidget* table;GtkWidget* button;GtkWidget* frame;gtk_init(&argc,&argv);window = gtk_window_new(GTK_WINDOW_TOPLEVEL);gtk_window_set_title(GTK_WINDOW(window),"格状容器");gtk_window_set_default_size(GTK_WINDOW(window),400,300);g_signal_connect(G_OBJECT(window),"destroy",G_CALLBACK(gtk_main_quit),NULL);gtk_container_set_border_width(GTK_CONTAINER(window),40);frame = gtk_frame_new("格状容器排列控件");gtk_container_add(GTK_CONTAINER(window),frame);table = gtk_table_new(4,4,FALSE);gtk_container_set_border_width(GTK_CONTAINER(table),10);gtk_table_set_row_spacings(GTK_TABLE(table),5);gtk_table_set_col_spacings(GTK_TABLE(table),5);gtk_container_add(GTK_CONTAINER(frame),table);button = gtk_button_new_with_label("1");gtk_table_attach(GTK_TABLE(table),button,0,1,0,1,GTK_FILL,GTK_FILL,0,0);button = gtk_button_new_with_label("2");gtk_table_attach(GTK_TABLE(table),button,1,3,1,3,GTK_FILL,GTK_FILL,0,0);button = gtk_button_new_with_label("3");gtk_table_attach_defaults(GTK_TABLE(table),button,0,1,1,3);button = gtk_button_new_with_label("4");gtk_table_attach_defaults(GTK_TABLE(table),button,1,3,0,1);button = gtk_button_new_with_label("5");gtk_table_attach_defaults(GTK_TABLE(table),button,0,4,3,4);button = gtk_button_new_with_label("6");gtk_table_attach_defaults(GTK_TABLE(table),button,3,4,0,3);gtk_widget_show_all(window);gtk_main();return 0;}


       框架控件(Gtk_Frame)和窗口一样是一种只能容纳一个控件的对象,但它不能像窗口那样直接显示出来,必须把它放到窗口中才能显示出来。
       table = gtk_table_new(4,4,FALSE);创建格状容器,为4行4列,不容许均匀摆放子控件。
      在格状容器中排列控件使用gtk_table_attach和gtk_table_attach_defaults,它们的功能是向格状容器的指定区域中添加控件。
      函数gtk_table_attach有10个参数,前两个参数分别是格状容器和要放入到格状容器中的控件指针;接下来的4个参数是控件在格状容器中的位置坐标;最后4个参数是排放控件的属性和间隔距离。其中第7个参数和第8个参数类型为GtkAttachOptions,有3中分别是GTK_EXPAND(可扩展的);GTK_SHRINK(可缩小的);GTK_FILL(可添充的)
    函数gtk_table_set_row_spacings和gtk_table_set_col_spacings来设定格状容器中子控件的行间隔和列间隔。

0 0
原创粉丝点击