首頁 / LinuxDev / GTK+ 2.0 教學-檔案選擇 File Selections

GTK+ 2.0 教學-檔案選擇 File Selections

檔案選擇(file selection)元件是一種快速、簡單的顯示文件對話框的方法。它帶有「Ok」、「Cancel」、「Help」按鈕,可以極大地減少程式設計的時間。

可以用下面的方法創建檔案選擇元件:

GtkWidget *_file_selection_new( const gchar *title );

要設置檔名,例如,要在打開時指向指定目錄,或者給定一個預設檔名,可以使用下面的函式:

void gtk_file_selection_set_filename( GtkFileSelection *filesel,
                                      const gchar      *filename );

要獲取用戶輸入或點擊選中的文字,可以使用下面的函式:

gchar *gtk_file_selection_get_filename( GtkFileSelection *filesel );

還有幾個指向檔案選擇元件內部的元件的指標,它們是:

  dir_list
  file_list
  selection_entry
  selection_text
  main_vbox
  ok_button
  cancel_button
  help_button

在為檔案選擇元件的信號設置回呼函式時,極有可能用到ok_button、cancel_button和help_button指標。

下面的範例是來自testgtk.c中的一段程式碼。修改了一下使它可以獨立執行。你可以看到,創建一個檔案選擇元件並不費多少功夫。在這個範例中,Help按鈕出現在螢幕上,但是它什麼也不做,因為沒有為它的信號設置回呼函式。

#include <gtk/gtk.h>
/* 獲得檔名,並將它列印到控制台(console)上 */
static void file_ok_sel( GtkWidget        *w,
                         GtkFileSelection *fs )
{
    g_print ("%s\n", gtk_file_selection_get_filename (GTK_FILE_SELECTION (fs)));
}

int main( int   argc,
          char *argv[] )
{
    GtkWidget *filew;

    gtk_init (&argc, &argv);
    /* 創建一個新的檔案選擇元件 */
filew = gtk_file_selection_new ("File selection");

    g_signal_connect (filew, "destroy",
	              G_CALLBACK (gtk_main_quit), NULL);
   /* 為ok_button按鈕設置回呼函式,連接到file_ok_sel function函式 */
   g_signal_connect (GTK_FILE_SELECTION (filew)->ok_button,
		      "clicked", G_CALLBACK (file_ok_sel), (gpointer) filew);
    /* 為cancel_button設置回呼函式,銷毀元件 */
g_signal_connect_swapped (GTK_FILE_SELECTION (filew)->cancel_button,
	                      "clicked", G_CALLBACK (gtk_widget_destroy),
			      filew);
    /* 設置檔名,比如這一個檔案儲存對話框,我們給了一個預設檔名 */
    gtk_file_selection_set_filename (GTK_FILE_SELECTION(filew), 
				     "penguin.png");

    gtk_widget_show (filew);
    gtk_main ();
    return 0;
}
« 
單元首頁
Print Friendly, PDF & Email
馬上成為工作達人的Fans

About ㄚ琪

工作達人Fun Taiwan的創辦者及總編,可以在這裡更認識他。

One comment

發表迴響

你的電子郵件位址並不會被公開。 Required fields are marked *

*

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料

Scroll To Top