QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1147|回复: 2

glade 编程问题:file chooser dialog

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

请教:有什么方法能在原窗口window1的entry1构件中显示file chooser dialog的文件名。或请推荐一个类似的C语言应用程式的源码。谢谢!

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

callbacks.h 和callbacks.c如下:
callbacks.h  
[code:1]#include <gnome.h>

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

GtkWidget *window1;/*这里没有再定义一个新窗口window2,测试表明和定义新窗口效果一样,用于装载file chooser dialog构件*/
/*以下为自动生成*/
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);[/code:1]

callbacks.c :
[code:1]void
on_button1_clicked (GtkButton *button,
gpointer user_data)
{
/*在定义的window1上(这和主窗口window1不是同一个)建立并显示file chooser dialog*/
window1 = create_filechooserdialog1 ();
gtk_widget_show (window1);

}

void
on_button2_clicked (GtkButton *button,
gpointer user_data)
{
gtk_widget_destroy (window1);/*销毁在callbacks.h中定义的window1窗口*/
}

void
on_button3_clicked (GtkButton *button,
gpointer user_data)
{
/*获取file chooser dialog选取的文件名*/
filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER
(window1));
/*在控制台显示文件名*/
g_print ("your get filename is %s\n",filename);
/*试图在主窗口中的entry1文本框显示获取文件名,但进程却在file chooser dialog窗口filechooserdialog1中找entry1,问题就出在这儿*/
GtkWidget *entry1 = lookup_widget (GTK_WIDGET(button), "entry1");
gtk_entry_set_text (GTK_ENTRY (entry1), filename);
gtk_widget_destroy (window1);
}[/code:1]
 楼主| 发表于 2006-1-21 13:29:48 | 显示全部楼层

问题解决

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

        dialog = gtk_file_chooser_dialog_new ("Open File",
                                     window1,
                                      GTK_FILE_CHOOSER_ACTION_OPEN,
                                      GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
                                      GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
                                      NULL);

if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
  {
   
    filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
    gtk_widget_destroy (dialog);
   
  }

        gtk_widget_destroy (dialog);

          GtkWidget *entry1 = lookup_widget (GTK_WIDGET(button), "entry1");
        gtk_entry_set_text (GTK_ENTRY (entry1), filename);

}
[/code:1]
回复

使用道具 举报

发表于 2006-2-11 02:06:57 | 显示全部楼层
look_up() 是从anjuta创建的project的src/support.c中找到的,这个函数可得到父控件.其实就是
利用了widget->parent属性
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-11-2 22:35 , Processed in 0.041958 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

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