GTK+3 是跨平台 GUI 工具包,可在 Linux、Windows 上運行。本文示範最基礎的視窗創建、固定佈局容器、按鈕信號連接與主事件循環。
#include
int main(int argc, char *argv[]) {
GtkWidget *window, *fixed, *button;
gtk_init(&argc, &argv);
// 1. 創建頂層視窗
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window), "你好");
gtk_window_set_default_size(GTK_WINDOW(window), 230, 150);
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
// 2. 固定佈局容器
fixed = gtk_fixed_new();
gtk_container_add(GTK_CONTAINER(window), fixed);
// 3. 創建按鈕並放置座標
button = gtk_button_new_with_label("退出");
gtk_fixed_put(GTK_FIXED(fixed), button, 50, 50);
gtk_widget_set_size_request(button, 80, 35);
// 4. 信號連接
g_signal_connect(G_OBJECT(button), "clicked",
G_CALLBACK(gtk_main_quit), G_OBJECT(window));
g_signal_connect_swapped(G_OBJECT(window), "destroy",
G_CALLBACK(gtk_main_quit), NULL);
// 5. 顯示所有元件並進入主循環
gtk_widget_show_all(window);
gtk_main();
return 0;
}
gtk_init():初始化 GTK,解析命令列參數。gtk_window_new():創建視窗,設定標題、預設尺寸、顯示位置。GtkFixed:無佈局管理的容器,需手動指定子元件 (x, y) 座標與尺寸。gtk_button_new_with_label():創建帶文字標籤的按鈕。g_signal_connect():連接信號
"clicked" → gtk_main_quit() 退出主循環。"destroy" → gtk_main_quit()(swapped 交換參數順序)。gtk_widget_show_all() 遞歸顯示視窗及所有子元件。gtk_main() 進入事件主循環,等待用戶交互。
gcc main.c -o gtk_demo `pkg-config --cflags --libs gtk+-3.0`
運行後彈出 230×150 視窗,居中顯示「退出」按鈕,點擊即關閉程式。
GtkBox/GtkGrid 等自適應佈局容器,而非 GtkFixed。GtkBuilder 動態加載,分離 UI 與邏輯。GtkCssProvider 為元件應用樣式表。