一般按鈕 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 則留言