这有两个选择(当然如果你自己从一个对话框控件中生成一个你想要的文件选择对话框我没意见),一个是GtkFileSelection控件,一个是GtkFileChooser控件,我使用后者,前者一般在新的程序中不使用了
#include <gtk/gtk.h>
void print_filename(GtkWidget *file)
{
GtkWidget *dialog;
gchar *filename;
filename=gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(file));
gtk_widget_destroy(file);
dialog=gtk_message_dialog_new(NULL,GTK_DIALOG_MODAL,GTK_MESSAGE_INFO,GTK_BUTTONS_OK,filename);
gtk_dialog_run(GTK_DIALOG(dialog));
gtk_widget_destroy(dialog);
}
void select_file(GtkWidget *widget,gpointer data)
{
GtkWidget *file;
int file_return;
file=gtk_file_chooser_dialog_new("SelectFile",NULL,GTK_FILE_CHOOSER_ACTION_OPEN,GTK_STOCK_CANCEL,GTK_RESPONSE_CANCEL,GTK_STOCK_OK,GTK_RESPONSE_ACCEPT,NULL);
if(gtk_dialog_run(GTK_DIALOG(file))==GTK_RESPONSE_ACCEPT)
print_filename(file);
else
gtk_widget_destroy(file);
}
int main(int argc,char **argv)
{
GtkWidget *win;
GtkWidget *button;
gtk_init(&argc,&argv);
win=gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(win),"FileDialog");
gtk_window_set_position(GTK_WINDOW(win),GTK_WIN_POS_CENTER);
g_signal_connect(G_OBJECT(win),"destroy",G_CALLBACK(gtk_main_quit),NULL);
button=gtk_button_new_with_label("Click Me");
gtk_container_add(GTK_CONTAINER(win),button);
g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(select_file),NULL);
gtk_widget_show_all(win);
gtk_main();
return 0;
}
编译
gcc -o file_select file_selec.c `pkg-config --cflags --libs gtk+-2.0`
如图
#include <gtk/gtk.h>
void print_filename(GtkWidget *file)
{
GtkWidget *dialog;
gchar *filename;
filename=gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(file));
gtk_widget_destroy(file);
dialog=gtk_message_dialog_new(NULL,GTK_DIALOG_MODAL,GTK_MESSAGE_INFO,GTK_BUTTONS_OK,filename);
gtk_dialog_run(GTK_DIALOG(dialog));
gtk_widget_destroy(dialog);
}
void select_file(GtkWidget *widget,gpointer data)
{
GtkWidget *file;
int file_return;
file=gtk_file_chooser_dialog_new("SelectFile",NULL,GTK_FILE_CHOOSER_ACTION_OPEN,GTK_STOCK_CANCEL,GTK_RESPONSE_CANCEL,GTK_STOCK_OK,GTK_RESPONSE_ACCEPT,NULL);
if(gtk_dialog_run(GTK_DIALOG(file))==GTK_RESPONSE_ACCEPT)
print_filename(file);
else
gtk_widget_destroy(file);
}
int main(int argc,char **argv)
{
GtkWidget *win;
GtkWidget *button;
gtk_init(&argc,&argv);
win=gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(win),"FileDialog");
gtk_window_set_position(GTK_WINDOW(win),GTK_WIN_POS_CENTER);
g_signal_connect(G_OBJECT(win),"destroy",G_CALLBACK(gtk_main_quit),NULL);
button=gtk_button_new_with_label("Click Me");
gtk_container_add(GTK_CONTAINER(win),button);
g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(select_file),NULL);
gtk_widget_show_all(win);
gtk_main();
return 0;
}
编译
gcc -o file_select file_selec.c `pkg-config --cflags --libs gtk+-2.0`
如图
