LinuxSir.cn,穿越时空的Linuxsir!

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

想搞点gtk的资料,哪里有啊?

[复制链接]
发表于 2006-6-14 08:10:22 | 显示全部楼层 |阅读模式
最近开始学习gtk,手头找到了两本书(下载),可是只有很少部分适合初学者,很多疑问不能找到解答。
以前在win下使用cb写东西非常方便,而gtk编程就很罗嗦,比如设置属性,这也就算了,也许习惯就好。关键有很多cb下比较容易实现的操作在我的gtk的基本书中怎么也没找到:

1 各种构件都有什么可用的信号?(最好有个列表)
2 构件的各种属性的读写函数都有什么?(个人认为这太不爽,比如书中只介绍了创建带标签的按钮,没说如何读出来,如何改。至于其他构件介绍得也很少)
3 可用的gtk自带的函数哪里有全一点的?
4 当有多个窗体的时候或者构件通过容器层层嵌套,访问某个构件是否需要像cb一样"Form1->btn1->啥"
5 ...
6 ...
...oo

实在不好意思问了,真的想知道那些gtk高手都是怎样练成的。
发表于 2006-6-14 13:12:10 | 显示全部楼层
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-6-14 15:27:45 | 显示全部楼层
楼上的大哥啊,我都说我是初学了,开始就上http://www.gtk.org会消化不 ... 就有点结石!

再说里面好像没有我想知道的东西吧,比如不同作用域构件访问问题等。

期待您的回答..........
回复 支持 反对

使用道具 举报

发表于 2006-6-14 16:26:25 | 显示全部楼层
gtk文档从Hello world---比如一个按键的创建---开始教,例程丰富。当然,你应该具备阅读英文的能力。如果不是,就去买美国人写的书的中文译本吧。

你说的这些要求,文档里几乎全部很明显的有。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-6-14 18:08:06 | 显示全部楼层
有?
唉,这么说还是我看书不认真!谢谢大家!我去看书。
回复 支持 反对

使用道具 举报

发表于 2006-6-15 13:57:07 | 显示全部楼层
Post by youxiazhu
最近开始学习gtk,手头找到了两本书(下载),可是只有很少部分适合初学者,很多疑问不能找到解答。
以前在win下使用cb写东西非常方便,而gtk编程就很罗嗦,比如设置属性,这也就算了,也许习惯就好。关键有很多cb下比较容易实现的操作在我的gtk的基本书中怎么也没找到:

1 各种构件都有什么可用的信号?(最好有个列表)
比方说GtkWindow的信号列表:
http://developer.gnome.org/doc/API/2.0/gtk/GtkWindow.html
Post by youxiazhu

2 构件的各种属性的读写函数都有什么?(个人认为这太不爽,比如书中只介绍了创建带标签的按钮,没说如何读出来,如何改。至于其他构件介绍得也很少)

GtkLabel:
http://developer.gnome.org/doc/A ... #gtk-label-set-text
Post by youxiazhu

3 可用的gtk自带的函数哪里有全一点的?

GTK+构建于Glib, GObject, Pango, Atk等之上,它们都有完整的文档,glib的:
http://developer.gnome.org/doc/API/2.0/glib/index.html
Post by youxiazhu

4 当有多个窗体的时候或者构件通过容器层层嵌套,访问某个构件是否需要像cb一样"Form1->btn1->啥"

一般说来,不需要,因为在Gtk+中每个控件,你都有一个它的指针,所以直接通过指针就可以访问了。
Post by youxiazhu

5 ...
6 ...
...oo

实在不好意思问了,真的想知道那些gtk高手都是怎样练成的。

...
看文档仔细点。
另外,使用Gtk+的话,要求对C很熟练。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-6-15 15:30:59 | 显示全部楼层
让我怎么说?楼上的大哥真感动的我想哭!愿上帝保佑你!

不过对你的第4个解答表示怀疑,照你说gtk+中访问控件是一件极其简单的事了,可我实践则不然。如果所有的变量、构件定义、创建、回调都在一个文件里实现,只有一棵构件数(只有一个窗口),也许情况如你所说。
但界面用glade创建的话,即使一个窗口也会有main.c、interface.c、callbacks.c几个文件,在回调函数中想引用另一个构件的话,不可能直接使用在interface.c中定义的构件指针就可以,一定要用ookup_widget()或是通过回调函数的参数传递过来,否则编译时提示(使用的构件指针)没有定义。
要是有两个窗口互访,实现起来就更难了,反正我还没有弄明白到底应该怎么做,只是知道(不用全局变量的话)好像应该用g_object_set/get_data()。

但愿一切如你所说,我宁可这几天的书白看,我也希望gtk+简单易用!不知您关于在一个窗口的回调函数中访问另一个窗口中的控件的方法有何高见?
回复 支持 反对

使用道具 举报

发表于 2006-6-15 16:45:55 | 显示全部楼层
Post by youxiazhu
让我怎么说?楼上的大哥真感动的我想哭!愿上帝保佑你!

不过对你的第4个解答表示怀疑,照你说gtk+中访问控件是一件极其简单的事了,可我实践则不然。如果所有的变量、构件定义、创建、回调都在一个文件里实现,只有一棵构件数(只有一个窗口),也许情况如你所说。
但界面用glade创建的话,即使一个窗口也会有main.c、interface.c、callbacks.c几个文件,在回调函数中想引用另一个构件的话,不可能直接使用在interface.c中定义的构件指针就可以,一定要用ookup_widget()或是通过回调函数的参数传递过来,否则编译时提示(使用的构件指针)没有定义。
要是有两个窗口互访,实现起来就更难了,反正我还没有弄明白到底应该怎么做,只是知道(不用全局变量的话)好像应该用g_object_set/get_data()。

但愿一切如你所说,我宁可这几天的书白看,我也希望gtk+简单易用!不知您关于在一个窗口的回调函数中访问另一个窗口中的控件的方法有何高见?

关于这个是没有什么好的办法,大多数情况是使用回调函数参数传入。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-6-15 17:33:21 | 显示全部楼层
嘎嘎,终于整通了!
void
on_SendFile_clicked                    (GtkButton       *button,
                                        gpointer         user_data)/*主窗口中按钮的回调*/
{
        GtkWidget *about;

        about = create_filechooserdialog1();
        /*注册欲在about窗口构件的回调函数中引用的主窗口中的控件到about构件*/
        g_object_set_data (GTK_OBJECT (about), "windows1_label19",
                                                        lookup_widget (GTK_WIDGET (button), "label19"));

        gtk_widget_show(about);

}


void
on_SeleFileBtn_clicked                 (GtkButton       *button,
                                        gpointer         user_data)/*一个对话框中按钮的回调*/
{
        /*put the select file to windows1*/
        GtkWidget *windows1_label19;
        windows1_label19 = g_object_get_data (
                                         GTK_OBJECT (gtk_widget_get_toplevel(GTK_WIDGET(button))),
                                         "windows1_label19"); /*通过注册的字符串取出主窗口中的构件指针*/
        g_assert(windows1_label19);
        gtk_label_set_text(GTK_LABEL(windows1_label19),"Select a file!");/*可以引用的*/
               
        gtk_widget_destroy(gtk_widget_get_toplevel(GTK_WIDGET(button)));
}
回复 支持 反对

使用道具 举报

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

本版积分规则

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