天天看點

GTK入門學習:布局容器之表格布局

學習水準和垂直布局容器後,我們幾乎能布出任何風格的布局,隻需要嵌套使用水準布局容器和垂直布局容器即可。假如我們要完成下圖的布局,我們該怎麼做呢?

GTK入門學習:布局容器之表格布局

1)建立一個垂直布局容器( A )

2)建立一個水準布局容器( B ),一個close按鈕( C )

3)将水準布局容器和close按鈕添加到垂直布局容器裡( 将 B 和 C 添加到 A )

4)建立button 1按鈕( D ) 和 button 2按鈕( E )

5)再将button 1按鈕 和 button 2按鈕添加到水準布局容器裡( 将 D 和 E 添加到 B )

這樣是可以完成上圖的布局,但是,假如布局裡有有很多控件,我們隻是通過水準和垂直容器嵌套布局會很麻煩,而且,控件越多,布局越麻煩。有沒有更簡單的方法呢?有,就是我們馬上要學習的表格布局,具體的操作流程和水準垂直布局一樣。

1)建立主視窗

2)建立布局容器

3)布局容器添加到視窗裡

4)建立所需控件

5)控件添加到布局容器裡

6)顯示所有控件

表格布局容器的建立:

GtkWidget *gtk_table_new( 

guint rows, 

guint columns, 

gboolean homogeneous );

rows: 行數

coumns: 列數

homogeneous:容器内表格的大小是否相等

傳回值:表格布局容器指針

布局容器添加控件:

void gtk_table_attach_defaults(

GtkTable *table, 

GtkWidget *widget,

guint left_attach,

guint right_attach,

guint top_attach,

guint bottom_attach );

table:  容納控件的容器 

widget: 要添加的控件

後四個參數為控件擺放的坐标,規則如下:

GTK入門學習:布局容器之表格布局

完整代碼如下:

#include <gtk/gtk.h>  // 頭檔案

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

  GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);    // 建立視窗
  
  GtkWidget *table = gtk_table_new(2, 2, TRUE);  // 表格布局,2行2列
  gtk_container_add(GTK_CONTAINER(window), table); // 容器加入視窗

  // button 1
  GtkWidget *button = gtk_button_new_with_label("buttton 1");
  gtk_table_attach_defaults(GTK_TABLE(table), button, 0, 1, 0, 1);// 把按鈕加入布局

  // button 2
  button = gtk_button_new_with_label("button 2");
  gtk_table_attach_defaults(GTK_TABLE(table), button, 1, 2, 0, 1);

  // close button
  button = gtk_button_new_with_label("close");
  gtk_table_attach_defaults(GTK_TABLE(table), button, 0, 2, 1, 2);

  gtk_widget_show_all(window);  // 顯示視窗控件

  gtk_main();  // 主事件循環

  return 0; 
}      

繼續閱讀