|
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+----------+----------+----------+
|
|