GTK+ 2.0 教學-按鈕元件

一般按鈕 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 — 當滑鼠游標離開按鈕元件時發出

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

點我分享到Facebook

1 則留言


發佈留言

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