一般按鈕 Normal Buttons
在前面我們見到得最多的就是按鈕元件了。它們十分簡單。創建按鈕有好幾種方法。你可以用 gtk_button_new_with_label() 或 gtk_button_new_with_mnemonic() 來創建一個帶標籤的按鈕,從庫存物件中使用 gtk_button_new_from_stock() 創建一個包含影像和文字的按鈕,或者用 gtk_button_new() 創建一個空白按鈕。接著你可以決定把一個標籤或像素圖(pixmap)封裝到這個新創建的按鈕裡。要這樣做,創建一個新的盒,然後用常見的 gtk_box_pack_start() 把你的物件封裝到盒裡,再用 gtk_container_add() 把盒封裝到按鈕裡。
這裡是一個用函式 gtk_button_new() 去創建一個帶影像和標籤的按鈕的範例。我把創建盒的程式碼分離了出來,這樣你可以在你自己的程式中使用它。後面還有更多使用影像的範例。
#include <stdlib.h> #include <gtk/gtk.h> /* 創建一個新的橫向盒,它包含一個影像和一個標籤,並傳回這個盒。*/ static GtkWidget *xpm_label_box( gchar *xpm_filename, gchar *label_text ) { GtkWidget *box; GtkWidget *label; GtkWidget *image; /* 為影像和標籤創建盒 */ box = gtk_hbox_new (FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER (box), 2); /* 創建一個影像 */ image = gtk_image_new_from_file (xpm_filename); /* 為按鈕創建一個標籤 */ label = gtk_label_new (label_text); /* 把影像和標籤封裝到盒子裡 */ gtk_box_pack_start (GTK_BOX (box), image, FALSE, FALSE, 3); gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 3); gtk_widget_show (image); gtk_widget_show (label); return box; } /* 我們常見的回呼函式 */ static void callback( GtkWidget *widget, gpointer data ) { g_print ("Hello again - %s was pressedn", (char *) data); } int main( int argc, char *argv[] ) { /* GtkWidget 是元件的儲存型態 */ GtkWidget *window; GtkWidget *button; GtkWidget *box; gtk_init (&argc, &argv); /* 創建一個新視窗 */ window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title (GTK_WINDOW (window), "Pixmap'd Buttons!"); /* 對所有的視窗做這一步是一個好主意。*/ g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL); g_signal_connect (window, "delete-event", G_CALLBACK (gtk_main_quit), NULL); /* 設置視窗邊框的寬度。*/ gtk_container_set_border_width (GTK_CONTAINER (window), 10); /* 創建一個新的按鈕 */ button = gtk_button_new (); /* 連接按鈕的 "clicked" 信號到我們的回呼 */ g_signal_connect (button, "clicked", G_CALLBACK (callback), (gpointer) "cool button"); /* 呼叫我們的創建盒的函式 */ box = xpm_label_box ("info.xpm", "cool button"); /* 封裝和顯示所有的元件 */ gtk_widget_show (box); gtk_container_add (GTK_CONTAINER (button), box); gtk_widget_show (button); gtk_container_add (GTK_CONTAINER (window), button); gtk_widget_show (window); /* 停在這裡,等待事件發生。 */ gtk_main (); return 0; } 函式 xpm_label_box() 可用於封裝影像和標籤到任何可以作為容器的元件裡。
按鈕元件有如下信號:
- pressed — 當滑鼠在按鈕元件裡按下時發出
- released — 當滑鼠在按鈕元件裡釋放時發出
- clicked — 當滑鼠在按鈕元件裡按下並接著在按鈕元件裡釋放時發出
- enter — 當滑鼠游標進入按鈕元件時發出
- leave — 當滑鼠游標離開按鈕元件時發出
1 則留言