LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1289|回复: 4

{问题已经解决}glade 编程:file chooser dialog 获取的文件名在窗口中entry构件显示

[复制链接]
发表于 2006-1-20 13:47:48 | 显示全部楼层 |阅读模式
问题是file chooser dialog 获取的文件名在控制台中能正常显示,但不能在文本框中设置和显示
,file chooser dialog要重新建立窗口,用file chooser dialog的事件信号似乎不能用 lookup_widget 对原窗口操作。提示如下:

your get filename is :/etc/dhcpd.conf

** (dhcpsetup:29427): WARNING **: Widget not found: entry1

(dhcpsetup:29427): Gtk-CRITICAL **: file gtkentry.c: line 3716 (gtk_entry_set_text): assertion `GTK_IS_ENTRY (entry)' failed


由于才做linux下编程,请指教有什么方法在窗口中记录该数据。

以下为简要说明:
新建窗口
window1
包含构件
button1(浏览)/*用于获取文件名*/
entry1            /*用于显示获取的文件名*/
建立一个文件选择对话框
filechooserdialog1
包含:cancel (button2)和 open(button3) 两个事件信号

callbacks.h 和callbacks.c如下:

callbacks.h :

#include <gnome.h>

gchar *filename; /*用于存放获取文件名*/

GtkWidget *window1;/*这里没有再定义一个新窗口,测试表明和定义新窗口效果一样*/
/*以下为自动生成*/
void
on_button1_clicked                     (GtkButton       *button,
                                        gpointer         user_data);


void
on_button2_clicked                     (GtkButton       *button,
                                        gpointer         user_data);
void
on_button3_clicked                     (GtkButton       *button,
                                        gpointer         user_data);

void
on_filechooserdialog1_current_folder_changed
                                        (GtkFileChooser  *filechooser,
                                        gpointer         user_data);

callbacks.c :

void
on_button1_clicked                      (GtkButton       *button,
                                        gpointer         user_data)
{
       
        window1 = create_filechooserdialog1 ();
        gtk_widget_show (window1);

}

void
on_button2_clicked                     (GtkButton       *button,
                                        gpointer         user_data)
{
gtk_widget_destroy (window1);
}

void
on_button3_clicked                     (GtkButton       *button,
                                        gpointer         user_data)
{

       
        filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER
        (window1));
         g_print ("your get filename is :%s\n",filename);
        GtkWidget *entry1 = lookup_widget (GTK_WIDGET(button), "entry1");
        gtk_entry_set_text (GTK_ENTRY (entry1), filename);
        gtk_widget_destroy (window1);
         
}
 楼主| 发表于 2006-1-20 14:38:11 | 显示全部楼层
请推荐一个类似的应用文件源码。
redhat 的源码看起来费神,找不出所以然
回复 支持 反对

使用道具 举报

发表于 2006-1-20 23:07:30 | 显示全部楼层
void
on_button1_clicked (GtkButton *button,
gpointer user_data)
{

window1 = create_filechooserdialog1 ();
gtk_widget_show (window1);
/*在这里作设定好不好呀,这里才是自己的窗口呀!*/
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-1-21 09:59:30 | 显示全部楼层
没问题的,你打开的是filechooserdialog1窗口,在filechooserdialog1中的信号事件是不能关闭原window1的。如果怕混淆,建议建立一个window_dog窗口
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-1-21 13:12:12 | 显示全部楼层

在回调函数中直接建filechooserdialog,实现对主窗口entry构件设置

很显然,lookup_widget ()函数只能对默认窗口中的构件操作,而不能对另一个窗口中的构件进行操作。我发贴的目的是想找出对另个窗口的构件操作方法,后来台湾朋友PCMan提醒说不在glade中可以实现。我试着在回调函数中写,果然就实现了这功能。感谢PCMan朋友!
如果有对另个窗口的构件操作方法,恳请赐教!
代码如下:
callbacks.c

  1. void
  2. on_button1_clicked                    (GtkButton       *button,
  3.                                         gpointer         user_data)
  4. {
  5.        
  6.         GtkWidget *dialog;

  7.         dialog = gtk_file_chooser_dialog_new ("Open File",
  8.                                      window1,
  9.                                       GTK_FILE_CHOOSER_ACTION_OPEN,
  10.                                       GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
  11.                                       GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
  12.                                       NULL);

  13. if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
  14.   {
  15.    
  16.     filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
  17.     gtk_widget_destroy (dialog);
  18.    
  19.   }

  20.         gtk_widget_destroy (dialog);

  21.           GtkWidget *entry14 = lookup_widget (GTK_WIDGET(button), "entry14");
  22.         gtk_entry_set_text (GTK_ENTRY (entry14), filename);

  23. }
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表