|
GTK窗口布局管理控件常用到有两个box和table。box即盒子,有水平和垂直之分,故box只能针对控件进行一维空间布局,对二维空间来讲,box显得很笨重。
table即表,就是说把控件的空间布局看作是一张表,很好到利用了平面坐标的原理。其实它就是通过使用多个vbox和hbox来实现控件到排列。
box的创建方法:
vbox = gtk_vbox_new(TRUE, 1);上面程序中生成了GtkVBox。 我们把其中的第一个参数设置为 TRUE。这就意味着,程序中我的按钮都为同样的大小。至于按钮之间的距离大小被设置为“1”象素。
settings = gtk_button_new_with_label("Settings");
gtk_box_pack_start(GTK_BOX(vbox), settings, TRUE, TRUE, 0);在上面的程序中我们把“settings “按钮布局在vbox容器构件中。 至于函数实参中的前两个参数,分别是容器构件和我们要放置的子构件。接下来的三个参数中分别是expand, fill和padding。 值得注意的是如果fill对应的参数是FALSE,则按钮就不会充满整个vbox构件。比较类似的是,如果之前在gtk_vbox_new(TRUE, 1);已经设置按钮都是等宽高了,所以expand对应的参数,是完全没有效果的。(译者注:此处建议fill expand都设为TRUE,至于具体区别和含义可在编程时感受)
table的创建方法:
pHtable = gtk_table_new(4, 3, TRUE)上面程序创建了一个4行3列的容器。
pHlable[0] = gtk_label_new("Test1");
pHlable[1] = gtk_label_new("Test2");
pHlable[2] = gtk_label_new("Test3");
pHlable[3] = gtk_label_new("Test4");
pHedit = gtk_entry_new();
gtk_table_attach(GTK_TABLE(pHtable),pHlable[0],0,1,0,1,GTK_EXPAND, GTK_EXPAND, 0, 0);
gtk_table_attach(GTK_TABLE(pHtable),pHlable[1],1,2,0,1,GTK_EXPAND, GTK_EXPAND, 0, 0);
gtk_table_attach(GTK_TABLE(pHtable),pHlable[2],2,3,0,1,GTK_EXPAND, GTK_EXPAND, 0, 0);
gtk_table_attach(GTK_TABLE(pHtable),pHlable[3],1,2,1,2,GTK_EXPAND, GTK_EXPAND, 0, 0);
gtk_table_attach(GTK_TABLE(pHtable),pHedit,2,3,2,3,GTK_EXPAND, GTK_EXPAND, 0, 0);上面的代码创建了4个label和一个edit控件,并分别布局在如下图所示到table中。
上面代码的gtk_table_attach(GTK_TABLE(pHtable),pHlable[0],0,1,0,1,GTK_EXPAND, GTK_EXPAND, 0, 0)的第3到6个参数共4个参数分别表示控件在table中的左上角和右上角的横坐标以及左下角和左下角纵坐标值。
0 1 2 3
0+----------+----------+----------+
| | | |
1+----------+----------+----------+
| | | |
2+----------+----------+----------+
| | | |
3+----------+----------+----------+
| | | |
4+----------+----------+----------+
|
|