GTK+ 2.0 教學-用表格封裝

讓我們看看另一種封裝的方法 – 表格(Tables)。 在某些情況下這是極其有用的。

使用表格的時候,我們建立網格來放入元件。元件可以佔滿我們所指定的所有空間.

第一個要看的,當然是gtk_table_new()這個函式:

GtkWidget *gtk_table_new( guint    rows,
                          guint    columns,
                          gboolean homogeneous );

第一個參數是表格中要安排的行的數量,而第二個,顯然,就是列的數量。

homogeneous 參數跟表格框(table’s boxes)的大小處理有關。如果 homogeneous 是 TRUE,所有表格框的大小都將調整為表格中最大元件的大小。如果 homogeneous 為 FALSE,每個表格框將會按照同行中最高的元件,與同列中最寬的元件來決定自身的大小。

行與列為從0到n編號,而n是我們在呼叫 gtk_table_new 時所指定的值。所以,如果你指定rows = 2及columns = 2, 佈局圖會看起來像這樣:

 0          1          2
0+----------+----------+
 |          |          |
1+----------+----------+
 |          |          |
2+----------+----------+

注意坐標系統開始於左上角。要將元件置入盒中,使用下面的函式:

void gtk_table_attach( GtkTable         *table,
                       GtkWidget        *child,
                       guint            left_attach,
                       guint            right_attach,
                       guint            top_attach,
                       guint            bottom_attach,
                       GtkAttachOptions xoptions,
                       GtkAttachOptions yoptions,
                       guint            xpadding,
                       guint            ypadding );

第一個參數(”table”)是你已經創建的表格,第二個參數(”child”)是你想放進表格裡的元件。

left_attach和right_attach參數指定元件放置的位置,並使用多少個boxes來放。如果你想在2×2的表格中的右下表格(table entry)處放入一個按鈕,並且想讓它充滿這個項目,則left_attach應該為 = 1, right_attach = 2, top_attach = 1, bottom_attach = 2。

現在,如果你想讓一個元件佔據我們這個2×2表格的整個頂行,你就用left_attach = 0, right_attach = 2, top_attach = 0, bottom_attach = 1。

xoptions及yoptions是用來指定封裝時的選項,可以通過使用「OR」運算以允許多重選項。

這些選項是:

GTK_FILL
如果表格盒框大於元件,同時GTK_FILL被指定,該元件會擴展開以使用所有可用的空間。

GTK_SHRINK

如果表格元件分配到的空間比需求的小(通常是用戶在改變視窗大小的時候),那麼元件將會推到視窗的底部以外的區域,無法看見。如果GTK_SHRINK被指定了,元件將和表格一起縮小。

GTK_EXPAND

這會導致表格擴展以用完視窗中所有的保留空間。

Padding和在盒(boxes)中的一樣,在元件的周圍產生一個指定像素的空白區域。

gtk_table_attach()有很多選項,所以,這裡有一個簡寫:

void gtk_table_attach_defaults( GtkTable  *table,
                                GtkWidget *widget,
                                guint      left_attach,
                                guint      right_attach,
                                guint      top_attach,
                                guint      bottom_attach );

X及Y選項預設為GTK_FILL | GTK_EXPAND,X和Y的padding則設為0。其餘的參數與前面的函式一樣。

我們還有 gtk_table_set_row_spacing() 和 gtk_table_set_col_spacing()。這些在指定的行或列之間插入空白。

void gtk_table_set_row_spacing( GtkTable *table,
                                guint     row,
                                guint     spacing );

void gtk_table_set_col_spacing ( GtkTable *table,
                                 guint     column,
                                 guint     spacing );

注意,對列來說,空白插到列的右邊,對行來說,空白插入行的下邊。

也可以為所有的行或/和列設置相同的間隔:

void gtk_table_set_row_spacings( GtkTable *table,
                                 guint    spacing );

和,

void gtk_table_set_col_spacings( GtkTable *table,
                                 guint     spacing );

注意,用這些呼叫,最後一行和最後一列並不會有任何空白存在。

感謝你看到這裡,很快就可以離開了,但最好的獎勵行動就是按一下幫我分享或留言,感恩喔~

點我分享到Facebook

1 則留言


發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *