免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 7811 | 回复: 10
打印 上一主题 下一主题

用Glade2开发图形用户界面 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-11-24 19:00 |只看该作者 |倒序浏览
用Glade2开发图形用户界面
http://www.gd-linux.org/bbs/show ... amp;p=4126#post4126
--------------------------------------------------------------------------------
如果你不想看这个文本模式的文章,你可以下载本贴下面的附件的html文档 (下载后请用tar jxvf glade2-devel.tar.bz2 解压)
http://blog.chinaunix.net/resserver.php?blogId=6198&resource=glade2-devel.tar.bz2

用Glade2开发图形用户界面

作者: Rikke D. Giles 版权: 2003, Rikke D. Giles
Glade由Damon Chaplin编写 感谢hulihutu翻译



源码:
* 介绍:
o 什么是Glade?
o 哪里可以得到Glade?
o Glade如何使用?
o Glade能做什么不能做什么
o 基本术语
* Glade快速浏览
o Glade界面
+ 主窗口
+ 调色板窗口
+ 属性窗口
+ 控件树窗口
o Glade生成的文件
+ 保存一个工程时
+联编一个工程时
*GUI: 一些需要考虑的事情
o 设计时需决定的事
o Gnome相关的设计
o KDE相关的设计
o 一致性
o 简洁
* 范例: GTemp
o 目标
o 创建GUI
o 创建第一个窗口
o 填满主程序窗口
o 加入随后一些的窗口
o 加入信号和回调函数
* 最后: 与GUI相互连接
o 库和APIS
o 控件附注
o 调出新窗口
o 当不再使用窗口时销毁它
o 下一步?
* 编写代码: Gtemp Redux
o 第一次编译
o 程序开始时只打开一个窗口
o 使Gtemp主窗口右上角的X图标起作用
o 使“退出”菜单项和“退出”按钮起作用
o 当选择“关于”菜单项调出“关于”窗口
o 使Gtemp能够转换温度值
o 此时,我们有一个可用的程序了
o 加入错误信息
* 控件的详细信息
o Gtk+基本控件
o Gtk+容器控件
o Gtk+附加的控件
o Gnome控件
o 不推荐使用的控件
o Glade1中有但Glade2中没有的控件
* 总结及资源
* 作者, 感谢, 版权


英文版在http://glade.gnome.org




介绍

介绍:
什么是Glade?
Glade用来为GTK+和GNOME程序快速地设计图形用户界面。如果安装了GTK+和/或GNOME库,也可用在Linux下任何桌面环境中。

哪里可以获得Glade?
Glade可以从glade.gnome.org上下载。它也在包含不同格式的所有Linux主要发行版中。到2003年4月,最新版本是1.1.3,它可能是Glade2.0之前最后的版本。

Glade如何使用?
Glade有两种使用方法:
用Glade创建GUI
用libglade打开*.glade文件(xml),创建GUI on the fly

Glade能做什么不能做什么:

Glade可以开发GUI界面及相关代码
它可以在程序的最后,创建连接到前端GUI的空的callbacks和signal。
Glade不能用来开发程序的内部代码
Glade不是一个完整IDE,换句话说它并不包含编译器,编辑器和调试器。 它可以连接这些程序,比如用gvim做为编辑器,gcc做为编译器以及gdb做为 调试器。Linux下有一些IDEs可以或即将可以与Glade协同工作,Anjuta就是其中一个。

基本术语:

前端/Gui: 在窗口环境下,用户能够看到及互动的图形界面。The 'eye candy'.
后端/内容: 程序中确实能干事情的部分,处理用户输入,提供输出,计算等。 基本上程序的这部分对用户是不可见的。
控件:用来创建窗口的几个或多个部件。简单的可以是一个标签,复杂的可以是 一个数据多叉树。
回调/信号处理器/信号: 控件针对特定的用户动作发出一个信号(比如,在窗口右上角的"X"按下鼠标键)。信号处理器或回调是一个响应这个信号的函数。gtk_main()负责管理它。对于Glade开发者来说,要做的就是告诉回调函数信号发生后做什么。注意这个并不象听上去那么简单。




2.Glade快速浏览

用Glade2开发图形用户界面
作者: Rikke D. Giles, 版权 Rikke D. Giles 2003

Glade快速浏览
Glade界面
主窗口
主窗口如右图所示。在这里,你可以指定关于工程的选项,保存工程,打开工程 以及联编工程。它还包含有你所创建每个独立窗口的列表

"工程"菜单及"编辑"菜单含义比较明显。通过"查看"菜单你可以打开几个 窗口来查看工程的几个不同方面。Glade运行后自动打开调色板窗口和属性窗口。 同时打开控件树窗口会比较有用。

"设置"菜单能够改变Glade几个方面。可以尝试改一下看哪种你更喜欢。最后的 "帮助"菜单含义也明显。

调色板窗口
调色板包含了Glade可用的控件。共几页控件,可以点击'Gtk+ Basic'、 'Gtk+ Additional'、' Gnome'和'Deprecated'按钮来切换。"不推荐"页包含了 那些用的较少的控件,有老的Gtk1样式的"list and tree"控件以及不同的多余 Gnome控件。
根据Glade的安装,可能会发现其它可用的控件。如果Glade安装有定制控件, 调色板上就会有这些页。如果安装了Gnome-DB支持,就会有额外的"Gnome-DB"页

点击调色板上的控件就会选择它,然后再次点击你希望把它加入程序界面的位置。 必须先选一个窗口做为容纳其它控件的地方。

属性窗口
在属性窗口可以调节和设置程序里不同控件的属性。最少给每个主要输入/输出 控件一个名字。还可以设置缺省大小,确定能否编辑(如果它是一个文本类型 的控件), 确定是否能被鼠标点击,改变容器控件的大小及其它。你也可以设置每 个控件的标题和headers。
这个窗口有好几个标签页: Widget, Packing, Common, Signals and Accessibility (有国际通行的残疾人士标志)。每个标签页的细节根据控件类型有所不同,因而不再细说。 "Widget"标签页下可以设置控件的名称和基本外观。"Packing"标签页能让控件在容器内移动,以及设置当改变窗口尺寸时控件如何扩展和缩短。 "Common"标签页可以设置更多的的细节参数,比如如果你必须有一个固定尺寸的窗口及其它。"Signals"标签页很重要,可以为每一个希望捕获的信号设置回调函数或信号处理器。"accessibility"标签页在 Glade2第一次出现,允许设置参数以符合GNOME易用指导方针。这会使人通过发音合成器 更容易使用你的程序,等等。

控件树窗口
在主窗口的"查看"菜单中可以找到控件树窗口。它列出程序使用的所有控件,它们的名称和从属关系树。右键点击树中的任何控件可以选择它,它的父控件,剪切、复制、删除等等。如果程序需要重建,这样可以很简单地移动控件,而不需要重做名称、信号处理器、尺寸选项等等。注意如果把控件从一个地方拷到另一个地方,新控件将有缺省的名字和值。因为每一个控件必须有一个唯一的名字。



用Glade2开发图形用户界面

作者: Rikke D. Giles, 版权 Rikke D. Giles 2003
Glade快速浏览: 第2页
Glade生成的文件
保存工程时

当你在glade主窗口按下保存时,glade将会在工程选项中指定的目录下保存两个文件。如果没有指定任何工程名字,glade将会保存在个人目录下面的/Projects子目录下。工程名为'Project#',#是一个数字,与你所建工程数量相关。给工程/程序命名时最好避免歧义。如果命名了工程,用你程序的名字替换下面的project#。

保存时创建的两个文件是:

* Project1.glade
* Project1.gladep

'Project1'是你选项中给出的名字,等等。

这两个文件含有xml代码,glade或libglade用来调出你所创的程序。如果联编了工程,*.glade文件将会被libglade调用。如果你想在程序中调用libglade 那就直接使用*.glade文件。
联编工程时

当按下主窗口的联编时,Glade产生用来生成程序GUI的所有文件。这些文件有时很难理解,特别是当你对Linux下编译程序了解很少的时候。下面会深入介绍它们。

* 在 project# 目录
o acconfig.h/autogen.sh/configure.in/Makefile.am/stamp-h.in
这些文件是autoconf/autogen/automake系统所必须的,在Linux下这个系统能够自动编译并检查库依赖性。通常Glade用户只需输入./autogen.sh来配置他们的程序以及生成所需的Makefiles文件。如果工程需要一个特定的库,这个库将会加入配置文件或生成的Makefiles文件中。
o AUTHORS/ChangeLog/README/NEWS
当程序发布将会用到这些文件。它们是标准分发文件,与具体的程序相关。
o macros子目录
这个子目录保存了autoconf和autogen等系统所需的宏。一定不要把它弄乱了。
o po子目录
存有po翻译文件。如果不用gettext来使你的程序国际化,就不用管它。
o src 子目录
看下面。
* I在 project#/src 目录
o main.c
这个文件包含了main(), main()是所有C程序的初始化函数。只有当这个文件不存在时Glade才创建,因此你可以随意编辑。当Glade第一次生成main.c文件时,它允许显示所有创建的窗口。如果想在程序开始时只显示一个窗口需要编辑这个文件。
o support.c
包含glade支持函数,不能编辑。里面最有用的函数是lookup_widget(),允许通过另一个 控件的名字查找特定控件(假定它们在一个控件树中,比如在同一个窗口里等)。
o callbacks.c
有glade所写的所有回调函数和信号处理器。Glade不重写这个文件,不过当需要更多的 回调函数会向其中追加。Glade只写出了空的回调函数,需要你自己加入内容。
o interface.c
很象support.c,也不能编辑。Glade在里面写了生成GUI的函数。没有必要编辑它,如果编辑 过,下次联编程序时Glade又会重写。
o Makefile.am/Makefile.in/Makefile
这些文件由automake/autoconf包创建,为gcc编译程序提供指导。在这里可以加入包含的库、 新的资源文件等等。

论坛徽章:
0
2 [报告]
发表于 2005-11-24 19:01 |只看该作者
基本GUI
设计方案
输入/输出哪种数据?
每种数据是什么类型?
如何读入数据?
从磁盘
用户输入
从串口输入
等等
如何输出数据?
到文件
到屏幕
到串口
到数据库
等等
谁会使用这个程序?
作者:
如果设计的程序只是为自己使用,而不需要分发软件,你可以忽略一 大堆大多数软件所需要的错误处理、时钟和whistles及niceties。界面可以比较粗糙, 忽略所有相关的设计规范。
有特定技能的用户群:
设计错误处理时要考虑到用户的技能等等。比如, 针对专业技术人员软件可以更简洁,错误信息更直接等等。针对办公人员的软件则不能 这样。尽管对于特定用户普通的设计规范不太适用,但界面还是要很好地推敲。
普通用户:
应该有很多的错误处理,内容丰富并一致。界面应遵循所在窗口系统 的设计规范。尝试遵循易用的设计规范(下面有很多)。
程序是怎样的外观?
某些情况下,这是个人爱好的问题。
最大的功能也是最重要的。
Sticking within the guidelines/framework is important as well
如果可能,让它更直观一些。
如果你为其它人设计程序,让他们看一看,从技术和非技术的角度考虑一下。
Gnome特定的设计规范
Gnome程序有相应的设计规范, 它使桌面风格更统一,当然你可以不遵循它。也有易用的设计规范,如果 你的程序有残疾用户,这对你很重要。

KDE特定的设计规范
KDE同样也有设计标准。在这儿可以找到。.

一致性
程序里出现的东西、如何出现应保持一致,并与桌面环境设计规范保持一致。处理错误保持一致并遵循可预见的风格。显示数据也是如此。

简易
做为一个程序编写者,本能地使GUI跟着代码走。比如,当决定什么时,代码会包含一个分支。这个不需要用户知道,但代码必须这样来走,于是我们会把它包含在GUI里。尽量避免这样使事情复杂化。



范例:用Glade2开发图形用户界面
目标

某个讲师很讨厌换算摄氏(Celsus)和华氏温度。于是她写一个程序帮她来做这件事。这个程序也可以做为许多Linux发行版中单位转换程序的不错的前端。(注意单位转换程序只能做直接的乘法转换(如线性的),而不能象 C到 F 或 F 到 C 的转换那样)

向这个程序输入一个 C或 F的数值,并转换成另一种单位。 It will do so without any other user input, but a carriage return.

如果输入的不是数字,会在程序状态栏上显示错误信息,这是唯一可预知的用户错误。
创建GUI
从主菜单的程序项目上选择Glade来启动(Redhat下)。

按'new'键,会弹出一个窗口询问是gtk工程还是gnome工程, 选择Gnome。这样可以使用易用的gnome控件,并至少满足gnome设计规范第一 部分的要求。


按glade主窗口的'options'键,会打开一个象右边那样的窗口。要注意几个 标签页,缺省是'general'页。清除工程目录里的"project1"部分,改为gtemp。 同时其它工程名称部分会自动改为gtemp。

根据需要改变source和pixmaps的子目录名,并选择想要的语言。Glade自带 C和C++,其它语言通过插件实现。转到C选项页。

在C选项页,关闭gettext支持。Gettext提供国际化支持,不过根据我的经验, 它导致Glade的auotgen和configur经常出问题。对于这个教程,我们不需要它。 其它选项不变。如果程序用到多个不同的glade文件,最好根据需要改变一下。

检查libglade页。这个页允许保存供翻译用的字符串,这对国际化程序很重要。 对于本范例不用改变它的。
Glade Options

建立第一个窗口
Gtemp's main window, under Glade

转到Glade的调色板,按"Gnome"切换到gnome控件页,点击左上角第一个控件。 这个是gnome程序窗口控件。它会建立一个空的窗口,带有所有标准的gnome菜单、 工具条和其它。这个控件应该是左图那个样子。

在属性窗口,当选择程序窗口控件时,把它的名字改为'gtemp_app'。其它地方不变。

你可以浏览菜单上的菜单项及查看工具条的按钮。Gtemp程序很简单,不需要其它大多数选项。实际上,目前的设计中只会用到文件菜单下的"退出",帮助菜单,还需要在在工具条上有一个"退出"按钮。没有什么要保存,因为结果会立即显示在窗口里。也没有文件需要打开,因为直接在窗口里输入。没有什么要编辑和查看..。因此我们将去掉那些永远不会用到的命令,设置为不响应。(不活动/灰色)。如果后面要用的话,会把 它们设为活动状态。


首先高亮(点击)工具条。那些系统按钮(New, Open和Save)在长方形的部分里。属性窗口显示名字为"toolbar1"。注意工具条的尺寸设为3。我们只需要一个按钮,一个"退出"按钮,把尺寸设为1,这时工具条上只有一个"新建"按钮。现在,高亮 (点击)"新建"按钮。属性窗口中名字应该是'button1',把名字改为'quit_button'。向下找到系统按钮选择,点向下的箭头,会打开一个系统按钮选择菜单,选择"退出" 图标。设置按钮边缘宽度,5或3看上去不错。点主窗口"保存"保存已做的工作。


现在回到gtemp程序窗口,点'文件'菜单,菜单条会高亮显示,属性窗口显示 'menubar1'。在属性窗口里点编辑按钮,出一个象右边一样的新窗口-菜单编辑 器。

注意菜单条与菜单编辑器的布局及书写方式一致。'文件'是菜单条的第一项。 点击它打开一个子菜单,列有'new', 'open', 'save', 'save as', 菜单分割线和'quit'。 我们只需要'退出'。选择不需要的项目,点击右边的删除键去掉它们。

"编辑"菜单中有一些是我们需要的。不过后面还可能加入"偏好"和"属性",现 在就不改动了。Delete everything ele under 'edit'.点击"应用",回到gtemp程序窗口 看一下刚才工作的结果。

我们完全不需要"查看"项,删掉它。保留帮助菜单和'about'项,因为将会放入 一个"About"弹出窗口。每个人创造的东西应该受到表扬。
The Glade Menu Editor

对gtemp程序窗口还要做另一个更改。我们不需要进度条,不过状态条可以用来显示信息。选择窗口的中状态条。它的名字是'appbar1',愿意的话改个名字,通常没有必要因为程序中只有一个状态条,而且这种情况下它的系统名称不 不引起混淆。在属性窗口,设置'progress'为'no'。

完成后gtemp程序窗口应该象左图那样。我们还没有设置数据及程序应该做什么,不过希望你已经学会了如何调出菜单编辑器,通过属性窗口如何设置一些参数,以及在glade中自由浏览。如果你对所做的不满意,可以备份每次glade保存所写的 *.glade文件,或重新载入程序,或从头开始。




Gtemp:用Glade创建界面的范例
填充主程序窗口
象任何程序一样,在Gtemp中有很多种方法来检查和显示数据。 present the data in Gtemp. 我们可以在"edit"菜单->properties下设 一人菜单,让用户选择是从 C 转换到 F ,还是从 F 转换到 C 。可以在主窗口下设置选项菜单让用户选择是哪种转换。另一个方法更有用些,它只需要很少的几步就能得到正确结果。这个方法还可以扩展,这样我们能加入英里转公里、公里转英里等等。不过,这个程序我们只做温度单位的转换。输入数据最简单的方法是从一个文本框里获得。在C文本框里输入数值,就是从C转换到F。 在F文本框里输入数值,就是从F转换到C。没有用到的文本框返回结果。

我们需要两个温度单位标签,两个输入/结果的文本框。不需要设个按钮来 开始运算,在文本框按下回车键就会发出信号来开始。

每个窗口组件象文本框和标签需要放到容器里。现在,gtemp程序中空窗口就 是一个容器,不过它只能放入一个控件,因此我们需要在其中放入一个容器控件。 可以横向或纵向盒子容器,不过表容器更适合些。

在调色板里选择gtk+基本,点表容器控件。它在第7行从右数第2个。样子象:

在gtemp窗口,点空阴影部分。会弹出一个窗口,询问表有多少行和列。设行和 列为2,因为我们需要两个标签和两个文本框。如果需要后面可以在属性窗口中改变 它。gtemp窗口看上去应该象右图那样。

现在加入标签。点调色板的标签控件,它在gtk+ basic页下,第2行第1个控件, 样子是。点gtemp程序窗口中表的左上 角部分,标签放进窗口,名字叫'label1'。

在属性窗口把标签的名字改为fahr_label。标签内容改为'Fahrenheit'。它看 上去好象被压扁了,是不是?让我们扩展一下。在标签的属性菜单的主页面上有 X和Y排列文本框。把它们从0改为5。现在标签看上去好看些了。

创建另一个标签,放在表的右上角。名字叫做cel_label,内容为'Celsius'。 把它的排列改成与fahr_label一致。gtemp程序窗口看上去象左图那样。

下一步加入文本框控件。调色板中选择文本框控件。它在第2行每2列,样子是 。在gtemp程序 窗口点表的右下角放入文本框控件。

这个控件还需要改名并排列。改名为'fahr_entry',切换到属性窗口的第2页 (packing),设 h padding 和 v padding 为5。在这页点"yes"按钮,关闭 x expand属性。

表的右下角加入另一个文本框,名字是'cel_entry',排列改为跟上面那个一 样,记住关闭 x expand属性。

glade窗口按"save"保存你的工作。看上去应该是右图那样。

调整一下窗口,拖窗口的角来扩大和缩小窗口。你可能不喜欢它扩大和缩小、或是它的样子。这4个我们需要的小控件占了很大的地方。你可以在属性窗口设置所有控件的排列和扩展属性,包括容器控件。作者喜欢表的边设为5,打开homogenous 属性。可能你喜欢另一种外观。

本节学会了如何在容器控件里放入控件,如何设置排列和扩展属性,以及如何 设置控件的名字。你应该很熟悉属性窗口。你可以在控件上点右键来选择同一个父, as well as 控件树上的其它控件,并可以复印、剪切、粘贴或删除。



Gtemp: 用Glade创建界面的范例
加下一个窗口
Gtemp程序用状态条来显示错误信息,因此不需要弹出的对话框或错误窗口。 不过,需要一个"关于"窗口,下一步我们加入它。

我们可以从gtk+基本控件中创建这个窗口,不过既然我们已创建了一个glade程序,就用glade的"关于"控件来代替。在调色板窗口点gnome按钮进入gnome控件页。 选择第1行第2列的'gnome about dialog'控件,这会创建一个"关于"窗口。

在属性窗口改名为gtemp_about。gtemp没有图标或标识,就让它们空着。 把想写的内容加入到版权和作者窗口。记住,初版gtemp由Rikke D. Giles编写, 做为一个教程练习。原始的版权是GNU copyleft。完成后看上去如右图。



加入信号和回调函数
作者趋向于立刻加入全部信号处理同时进行后端编程。 Gtemp只有很少几个信号,现在我们开始加入它们。点击窗口右上角的x关闭"关于" 对话框。注意"关于"对话框已经加入到glade主窗口的控件列表中。

在gtemp程序窗口点退出按钮,在属性窗口会显示它的属性。点signals页,来设置signals页。信号文本框旁边是一个标有"..."的按钮,点它会出现这个控件信号的列表。信号根据控件的不同而不同,不过所有控件通常都有一些基本的信号,因为它们都是GtkWidget和 GtkContainer的子类。对于退出按钮,在GtkButton信号中选择'clicked',点OK,弹出的信号列表会消失。这个信号及句柄已写入正确的文本框内。点击"add",这个信号句柄会加入到信号句柄的列表中。加入一个信号 就是这么简单。

菜单编辑器已经自动地加入信号,因此我们不需要对gtemp中的主菜单做任何事情。不过,我们需要捕获当文本框使用时的活动信号。高亮 fahr_entry控件。属性窗口还显示在signals页,点"..."键,从GtkEntry信号中选择"activate"。右图是这个列表。注意它如何从按钮控件变化的。选择"activate"后,点击"ok"再点击 "add"把信号加入信号句柄列表中。对cel_entry控件做同样的工作。这是目前gtemp 所需加入的所有信号。

"关于"窗口有什么信号呢? 由于这是一个系统gnome对话框,已经设好了信号句 柄。我们没有理由去动它们,除非想要做的与系统设置的不同(为什么要这样?)。

论坛徽章:
0
3 [报告]
发表于 2005-11-24 19:04 |只看该作者
后端: 与GUI互动
库和API
当编写GTK+和GNOME程序时,需要注意几个不同的库和工具。以下是它们的列表,并带有简短的介绍。

Glib:
Glib提供了一些函数,用来替代基本的C函数特别是具有缓冲区溢出危险的函数。如果你正在进行gnu,gtk+和gnome程序的编写,Glib很值得学习。基本API在这里。许多先进的控件,比如列表和选项菜单用到了Glib中的链表,这也是需要熟悉它的另一个原因。
GDK:
GDK是一个基本的库,把GTK和窗口系统的细节隔离开。它面对窗口管 理器,比如metacity, sawfish或其它东西。它提供了很基本的画图工具及可能用在 callbacks.c里的函数,大多数函数用来隐藏和扩大窗口。API在这里。
Gtk+:
Gtk+是Gimp工具箱。版本1.* 与版本2.*不一致。Glade2使用2.*, Glade使用1.*。这个教程使用Gtk2。你可以在这里找到这些 API。Gtk+很重要,它提供了为Gtk+控件改变属性、捕获信号、获得并放置数据等等的所有函数。每个控件及其相关函数在API有描述,这是用 Glade编程的主要参考手册。
Libgnome和libgnomeui:
这些库包含了额外的gnome库。 如果你用glade开发gnome程序,需要安装它们。我们用在gtemp中的gnome控件也在这些库 里,APIs提供了使用这些控件的细节。查看libgnome文档 和libgnomeui文档。
Libglade:
glade用Libglade从*.glade文件中创建代码。 开发者可以用来做同样的事,载入一个*.glade xml文件来创建界面代码。参考手册在这里。
其它库:
还有一些可用的其它库,是gnome/gtk系统的一部分。 它们的API在gnome.org网站上的gnome开发者站点。
指向控件
连接后端和GUI仅仅是显示和接收来自控件的数据。上面提到的Gtk+和Gnome库文件为每一个控件提供函数,允许你设置和获取数据。不过有时在程序中你还是要指向控件。

最简单的方法是使用Glade在support.c里提供的lookup_widget()函数。这个函数以一个控件和控件名字做参数,返回所要的控件(如果它在参数控件的树里)。例如,Gtemp界面里创建了一个控件叫做fahr_entry,它在主程序窗口树中。如果我们正在处理fahr_entry的一个活动回调函数,不过想找到控件 cel_entry,把数据放进去,可以用 GtkWidget *cel_entry = lookup_widget(GTK_WIDGET(fahr_entry), "cel_entry")。这个看上去有点糊涂,不过基本上它是一个声明为GtkWidget类型 (cel_entry)的指针,与控件自己指的是同样一个东西。

另一个指向一个控件的方法是使用gtk_widget_get_toplevel()。参数是子控件。例如,找出cel_entry最上层的容器控件(通常是gtemp程序窗口)可以这样做 ... GtkWidget *gtemp_app = gtk_widget_get_toplevel(GTK_WIDGET(cel_entry));.

你也可以使用静态或全局变量来联系控件。经常这是从子窗口(如弹出窗口和对话框)指向主窗口是最简单的方法。不过,使用太多的全局变局会被认为是糟糕的编码,鼓励限制使用这它们。如果我们使用gtemp_app做为一个全局变量,并在main.c里实现它,那么在callbacks.c或其它需要用到的地方中把它声明为外部变量。从这个角度, Gtemp不需要做这些。

Glib提供了一种方法,可以将任何g_object和gtk+对象关联到一个关键字符串上。注意Gtk+小于2.0时,有一个gtk_object类,现在包含在g_object下。任何时候你可以使用指向设在一个对象上的数据。例如,这段代码设置一个指向cel_entry的标志并连接到 fahr_entry。
static gchar *my_key_string = "my_key_string";

cel_entry = lookup_widget(GTK_WIDGET(fahr_entry), "cel_entry");
g_object_set_data(G_OBJECT(fahr_entry), my_key_string, cel_entry);

程序的后面我们可以直接从fahr_entry获得cel_entry :
GtkWidget *cel_entry;

cel_entry = g_object_get_data(G_OBJECT(fahr_entry), my_key_string);

当然, 当指向的控件在同一个控件树中(如它们在同一个窗口)这个方法不太有用处。 lookup_widget函数会更好些。不过,这个技术很适合从一个窗口指向另一个窗口,而且不会用到全局变量。这样你可以从一个弹出窗口获得数据并输入到主窗口,比如不需要使主窗口全局化。

调出新窗口或菜单
Glade在interface.c里写入每个设计出来的窗口或弹出菜单的创建函数。通常使用这些函数没有必要编辑interface.c文件。这些函数叫做create_windowname(), 没有参数,返回一个指向实际窗口或弹出菜单控件的指针。例如,下面这段代码为 Gtemp创建"关于"窗口:
GtkWidget *about;

about = create_gtemp_about();

是,就是这么简单。

当窗口不再使用时销毁它
如果你已经创建了一个弹出窗口或对话框,再也不会用到它,你可以用gtk_widget_destroy() 销毁它。参数是想要销毁的GtkWidget。通常这个函数会被要销毁窗口的"ok"或"cancel"键调用。例如,从一个名叫 'which_file'的弹出窗口上的"ok"按钮销毁这个窗口,只需要在这个按钮的回调函数中调用上面那个函数。:
gtk_widget_destroy(gtk_widget_get_toplevel(GTK_WIDGET(ok_button)));

注意我们没有把这个按钮自己传入这个函数,这只会销毁这个按钮。我们 把按钮的上层父控件(窗口)传入函数。

下一步?
现在你知道了库的参考手册在哪儿,如何指向程序中的控件,是时候转向编写代码了。程序的内容通常包含收到数据如何处理,或显示之前如何处理。Glade这方面不做任何事情,程序开发变成了一个编码问题,而不是一个界面问题。想知道一个简单的界面如何连接到一个一个简单的后端,我们将转入到Gtemp程序。



后端编程: 回到Gtemp
第一次编译
如果没有保存,就在glade的主窗口保存你的程序。点联编按钮来生成程序代码。 如果你想的话,可以检查一下gtemp子目录看生成些什么。


打开一个终端窗口
在gtemp目录,输入autogen.sh
你可以看到一长列autogen和autoconf的信息。除非 配置突然跳出,否则不用管它。
当autogen结束输入'make'。
进入/src子目录。列文件可以看到已经有一个gtemp的可执行文件。
输入./gtemp运行这个可执行文件。

gtemp程序开始运行。可以看到我们创建的所有窗口--主程序窗口和"关于"对话框都打开了。你可以关闭"关于"窗口,象前面所讨论的那样它已经设好了信号和回调函数。不过,我们不希望一下子打开两个窗口,这是我们要修改的第一件事情。

点窗口右上角X关闭程序。注意命令行并没有返回到开始运行gtemp的终端窗口。这是因为为窗口图标自动创建的回调函数(最小化、最大化和关闭)没有完全关闭程序。这显示得很愚蠢,同时你在一个程序里使用多个窗口。用户关闭弹出窗口,程序应该结束。我们将来设置回调函数以便点击X时程序关闭。这是我们要修改的第二件事情。

我们需要当按下"退出"按钮或选择菜单条"文件"下的退出时程序能够退出。这是加入 第三件事情。还要当选择"帮助"菜单下"关于"菜单项时弹出"关于"窗口。还剩最后一个 事情, C 到 F 或 F 到 C 的实际转换。

程序开始时只打开一个窗口
打开一个编辑窗口。本教程作者使用Gvim,不过Emacs、gedit或一个字处理软件也 可以。Gvim和Emacs很适合,因为能给代码加颜色。打开gtemp的main.c文件。它在 /src子目录下。

main.c文件开头几行说明了glade不会改写这个文件,可以根据需要来修改它。记住, 如果你打开的glade生成文件没有这样说,就不要编辑它。来到main()函数,找到声明 GtkWidget *gtemp_about,删掉它。

向下翻找到
gtemp_about = create_gtemp_about ();
gtk_widget_show (gtemp_about);
删掉它们。

Glade为每一个设计的窗口生成create_xxx()函数比如create_gtemp_about()。当需要时可以用在你的代码中来创建它们。每一个窗口创建后用with gtk_widget_show()来显示。 现在我们删掉了这些行,不过很快会把它们加入到"关于"菜单项的回调函数中。

使Gtemp主窗口右上角的X工作
首先,我们需要加入另一个回调函数。在Glade选择Gtemp程序窗口,进入属性窗口。 在signals页,选择GtkWidget信号下的delete_event信号,把这个信号句柄加入列表,保存,重建程序。

用你选择的编辑器打开callbacks.c文件。你可以看到前面我们加入的所有信号句柄或 回调函数,刚才加入的delete event在文件的最下面。转到这儿。

加入
gtk_main_quit();

return FALSE;
在on_gtemp_app_delete_event()函数里。 想知道gtk_main_quit()函数的更多信息,你可以查询 gtk+ API在 gtk-General部分.

使"退出"菜单项和"退出"按钮工作
在on_quit1_activate()函数加入
gtk_main_quit()
函数调用。就做这么多。 on_quit_button_clicked()函数也这样处理。

选择"关于"菜单项时载入"关于"窗口
查找函数名为on_about1_activate()在这儿加入从main.c文件删 掉的创建窗口的代码。把下面的代码加进去:

GtkWidget *about

about = create_gtemp_about();
gtk_widget_show(about);

这就可以了。

论坛徽章:
0
4 [报告]
发表于 2005-11-24 19:04 |只看该作者
现在可以测试刚才所做的工作。在/src输入make重新编译。如果没有打字或其它错误, make不会显示任何错误信息。运行gtemp检查我们所做的工作。

现在我们开始编写后端。这个很简单,不过在一个复杂的程序里,可能有几个辅助的 文件,绝大多数后端不会放在callbacks.c,比如在gtemp里.

最后使Gtemp能够转换温度单位
目前在callbacks.c里应该有四个空的回调函数。其中两个on_properties1_activate() 和on_preferences1_activate(),现在用不到。使用剩下的 on_fahr_entry_activate()和on_cel_entry_activate()。

我们将要编写一个函数叫做compute_temp(),它将被这两个 entry_activate回调函数调用。定义两个标志, C_TO_F和F_TO_C以便我们知道正在进行哪种转换。 Compute_temp()以调用的控件、用户输入的温度和转换类型做为参数。

在文件头部,在其它#define下面加入这几行

#define C_TO_F 0
#define F_TO_C 1

void compute_temp(GtkWidget *this_widget, float temperature, int type);

这是这些函数和标志的声明。

在文件尾部,所有回调函数的下面,加入这个函数:

void compute_temp(GtkWidget *this_widget, float temperature, int type)
{
GtkWidget *other_entry = NULL;
float result = 0.0;
gchar *result_string = NULL;
switch(type) {
case C_TO_F:
result = ((9.0 / 5.0) * temperature) + 32.0;
other_entry = lookup_widget(this_widget, "fahr_entry");
break;
case F_TO_C:
result = (5.0 / 9.0) * (temperature - 32.0);
other_entry = lookup_widget(this_widget, "cel_entry");
break;
}
result_string = g_strdup_printf("%5.2f", result);
gtk_entry_set_text(GTK_ENTRY(other_entry), result_string);
g_free(result_string);
}

单步执行这个函数,它声明了正确的变量,进入了一个分支语句,在这个语句中温度单位的转换取决于传入了哪个文本框:other_entry = lookup_widget(this_widget, "cel_entry"); and other_entry = lookup_widget(this_widget, "fahr_entry"); 使用glade支持函数lookup_widget() 找到没有用户输入的那个文件框。Gtk_entry只接收文本,因此我们把浮点数通过 g_strdup_printf()转换成文本。这个功能很象printf() 函数,不管字符串有多长都能确保分配了足够的内存。接下来用gtk_entry_set_text() 把结果写入gtk_entry控件。用g_free()释放我们用 g_strdup_printf()创建的结果字符串。

所有的这些函数都可以在gnome.org上API部分查到。GtkEntry详细信息请看 这页。 你可以在这里 查到Glib字符串功能。

还需要在entry_activate里写入代码来实际运行compute_temp函数。找到回调函数名为 on_fahr_entry_activate() 加入以下代码:

gchar *fahr = NULL;

fahr = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);

compute_temp(GTK_WIDGET(entry), atof(fahr), F_TO_C);

这儿我们没有做 任何错误检查,只是用atof()把字符串fahr转换成浮点数。后面我们会加入错误检查。找到on_cel_entry_activate()函数,加入以下代码:

gchar *celsius = NULL;

celsius = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);

compute_temp(GTK_WIDGET(entry), atof(celsius), C_TO_F);

同样,我们后面会加入错误检查。注意在每一个代码片断我们使用GtkEditable代替GtkEntry。这是因为GtkEntry某些方面不推荐使用(在 Gtk+-1.0,不过在2.0中以恢复了entry_get_text 函数),特别是gtk_entry_get_text()函数。由于GtkEntry是GtkEditable的一个子类,用GtkEditable函数是比较有效的。我们只要记住用GTK_EDITABLE()转换宏把它 转换成一个新类。

现在,我们有一个可用的程序
重新编译看看。在/src子目录输入make,修改任何可能的打字错误,运行程序。如果你在文本框只输入数字,它会运行得很好。试着在其中一个文本框里输入'abc'。它给出了一个结果,因为atof()函数强行把"abc"转换成一个浮点数,不过我们知道结果是错的。如果这个程序只是自己用,而且你知道输入什么才能得到正确结果(象大多数编程者那样),那我们现在就停下来。不过让我们更进一小步,加入 简单的错误检查和提示。

加入错误提示
我们要写另一个函数check_temperature_value(),它将检查以确保输入的数值是数值型而不是其它。这个函数同样也被两个entry_activate函数调用,向程序 状态条输出一条错误信息。

在callbacks.c文件的底部加入函数:

gint check_temperature_value(GtkWidget *this_widget, gchar *value)
{
GtkWidget *appbar;
gint num = 0;
gchar this_char = '';

this_char = *value;

if (!this_char)
return 0;

while (this_char != '') {
if (!isdigit(this_char)) {
/* set up the error message */
appbar = lookup_widget(GTK_WIDGET(this_widget), "appbar1");
gnome_appbar_push(GNOME_APPBAR(appbar), "Please enter numbers only");
return 0;
} else {
num++;
this_char = value[num];
}
}
return 1;
}



我们需要在entry_activate回调函数调用这个函数。加入以下这些行到 on_cel_entry_activate()中,在compute_temp() 函数调用之前:

if (!check_temperature_value(GTK_WIDGET(entry), celsius))
return;
clear_appbar(GTK_WIDGET(entry));

把同样的行加入到 on_fahr_entry_activate()中,在 compute_temp()函数调用之前:

if (!check_temperature_value(GTK_WIDGET(entry), fahr))
return;
clear_appbar(GTK_WIDGET(entry));



最后我们需要clear_appbar()函数。它只是在输入是个正确的数字时从状态条上消除 错误信息。把它加入callbacks.c文件的最后:

void clear_appbar(GtkWidget *this_widget)
{
GtkWidget *appbar;

appbar = lookup_widget(GTK_WIDGET(this_widget), "appbar1");
gnome_appbar_clear_stack(GNOME_APPBAR(appbar));
}

不要忘了在文件头部附近加入两个函数头。编译程序,现有你有一个能工作、错误检查并发出信息的Gtemp版本!

论坛徽章:
0
5 [报告]
发表于 2005-11-24 19:06 |只看该作者
控件的更多细节

接下来是一些常用的控件列表,及它们所用的一些gtk函数。没有列出函数 参数,也没有列出每个控件的所有函数。如果需要这些信息请到这个教程的 库部分。

注意下面并不是控件的详细列表。 在Glade没有包含的库里有很多可用的控件。还有一些Gtk+控件比较容易理解 (如垂直和水平分隔线)也没有列在这里。
Gtk+基本控件
Image 名称 目标 函数及参考
gtk window icon 窗口 基本Gtk窗口 编程者不需要注意什么特别的函数,不过如果这是主窗口,你需要把gtk_exit()与delete_event信号关联(比如当点击右上角的X时)。
Gtk Dialog Window 对话框窗口 创建一个基本的对话盒/窗口 它没有什么特别的函数。你需要向按钮条加入按钮和其它你想要的东西。
Gtk File Selection 文件选择对话框 创建一个标准化的文件选择对话框窗口 内部工作由控件来处理。你需要连接按钮的信号(如clicked信号),及获得选择结果。
Gtk Color Selection Dialog 颜色选择对话框 选择颜色的对话框窗口 创建一个标准化的颜色选择对话框盒/窗口。你需要使按钮工作,并用 gtk_color_selection_get_color()获得颜色选择结果。
Gtk Font Selection Dialog 字体选择对话框选择字体的对话框窗口这是一个标准化的字体选择对话框盒/窗口。通常你需要设置按钮并获取选择结果。使用 gtk_get_font_selection_dialog_get_font() 做这件事。还有其它的函数来获取字体的名字及其它。查看列在本教程帮助部分的GTK+参考手册。
gtk menubar 菜单条 创建一个菜单条 你需要为所有下拉菜单的activate信号创建句柄。在Glade中有菜单编辑器来帮你做这个。参考本教程菜单编辑器部分。
gtk toolbar 工具条 创建一个工具条 你需要为按钮设置句柄。(通常是clicked 信号)。你还得在属性窗口里为一个按钮提供图标(或使用标准图标)及命名。
gtk label 标签 创建一个标签控件 它通常没有信号。这允许你在程序中放入一个标签。
gtk entry widget 文本框允许输入单行文本使用gtk_entry_set_text()、gtk_editable_get_chars()、 gtk_entry_set_editable() 有其它函数来操作这个单行文本。通常使用activate和changed信号。使用changed信号,设置一个标志,其后获得框内数据 (比如当按下OK键时)。
gtk Combo Box 下拉框 创建一个下拉框 使用这个控件或Gnome文本框创建一个下拉的框列表。 Gnome文本框自己管理这个列表,而ComboBox需要你自己来处理。它可以使用文本框的函数,独有的函数有: gtk_combo_set_value_in_list()等。
gtk text box 文本视图 多行文本编辑器 这个控件与Gtk+ 1.*相比有很大的变化。先创建一个GtkTextBuffer,在这里编辑文本,并在GtkTextView显示它。在一个很简单的程序中,可以用 gtk_text_view_get_buffer() 得到缓冲区,并用gtk_text_view_set_buffer()设置它。缓冲区自己发出信号,比如changed,insert_text等。视图本身了发出copy_clipboard, move_focus等信号。
Gtk Button 按钮 一个基本的按钮 所有按钮最常用的信号是clicked信号,也可以用enter, leave, pressed, released等。没有用来获得数据的特别函数,不过你可能经常会想让按钮最后销毁它的父窗口,用 gtk_widget_destroy()函数。
Gtk Toggle Button 切换按钮 一个基本的切换按钮 这个按钮用来代表有两种状态(开/关,0/1等)的变量和实体。它有一个特别的信号toggled,其它与普通按钮信号一样。
Gtk Check Button 多选按钮 一个多选按钮(用标签切换) 这是一个切换按钮,它也有两个状态(开/关等)。这种按钮也有标签,使它是一个有标签的切换按钮。你可以使用 toggled 信号。
Gtk Radio Button 单选按钮 一个单选切换按钮 它是一种特殊的多选按钮。单行按钮组成一组,当点击一个时其它都变成"关"或未被选择。这允许编程者从许多项目中选择一项。它的信号当然是toggled。在属性窗口中,可以设置单选按钮的组和标签。
Gtk Option Menu 选项菜单 创建一个菜单,用户可以选择一项。 常用的信号是clicked, enter, leave, pressed等。函数有gtk_option_menu_get_menu(), gtk_option_menu_set_menu()等。本教程后面有一个例子,说明如何把句柄联接到这个控件。
Gtk Spin Button 滚动按钮增加数字的按钮这是个有用的方法,可以从用户获取数字。数字在一个范围内,而且一直是数字型(如果你在属性窗口设数字型为TRUE)。也可以设范围、增幅和开始的数字。使用changed 和 activate 信号可以从滚动按钮获得数据。例如gtk_spin_button_get_value_as_float()或 gtk_spin_button_get_value_as_int ()。(记住用changed 信号设置一个标志,以后接收数据(如当按下OK键时))。
Gtk Status Bar 状态栏显示状态信息的地方它通常放在程序的底部,显示程序在做什么。比如,用户按下一个按钮来保存一个文件时,你可以在这儿显示"文件已保存"。使用 gtk_statusbar_push(), gtk_statusbar_pop()及其它函数。
Gtk List or Tree View 列表或树视图 显示树和列表的控件 这是Gtk+ 2.0中新控件, 代替ctree,clist,list和tree控件。理论上它有点复杂,不过使用起来很简单。更多信息请看AP,不过基本上你可以创建一个列表或树模型,并用列表或树方式来浏览。
Gtk Image Gtk图像控件 显示一幅图像 这是一个没有窗口的控件,它不接收事件,只是简单地用来显示 图像/动画/其它。
Gtk Drawing Area 画图区 创建custom控件的地方 使用这个控件来创建custom控件,可以画东西(比如图像)等

Gtk容器
gtk handle box 带柄盒子(译注:就是浮动工具条) 创建一个盒状容器,可以通过柄来移动。 它没有信号,内部自带柄。这个容器是'rip away'盒子之一, 你可以创建菜单并能把它移动到屏幕上想到的位置。
Horizontal Box Widget 横向盒子 放置控件的一系列盒子这是一个容器,如果愿意也可以连接信号,不过不需要的。不,我并知道当它垂直排列是为什么叫水平盒子,除非numerically it runs horizontally (比如一串数字,one for each box).
Gtk Vertical Box 垂直盒子 这是一个容器,如果愿意也可以连接信号,不过不需要的。
Gtk Table Box 表状盒子 在一个表格式中创建一系列盒子 这是一个容器,如果愿意也可以连接信号,不过不需要的。
Gtk Fixed Gtk Fixed 允许你在容器里固定控件的位置。 这个控件不应该在实际中使用。它对那些从VB背景转来的人比较适合, 但会妨碍你学习在Gtk+里如何正确地使用容器。尽量避免使用。
Gtk Horizontal ButtonBox 水平按钮盒 一个水平地放置按钮的盒子 这个盒子用来包含按钮。
Gtk Vertical ButtonBox 垂直按钮盒 一个垂直地放置按钮的盒子 这个盒子用来包含按钮。
Gtk Horizontal Pane 水平面板 创建一个面板,用户可以放大或缩小在一个窗口里的部件。 这是一个容器,如果愿意也可以连接信号,不过不需要的。 可改变大小的部件是其内置的。
Gtk Vertical Pane 垂直面板 创建一个面板,用户可以放大或缩小在一个窗口里的部件。 这是一个容器,如果愿意也可以连接信号,不过不需要的。 可改变大小的部件是其内置的。
Gtk Notebook Widget 标签页创建一系列"文件夹"盒子,如果用户点击标题,可以改变页内容。这是一系列的容器,如果愿意也可以连接信号,不过不需要的。你想要做的一件事是命名标题,或希望用这个控件来创建一个容易"改变"的布局,注意不要显示标题。
Gtk Frame 框架 创建一个框架,可以命名 这是一个容器,如果愿意也可以连接信号,不过不需要的。 如果你想,记住命名框架。
Gtk Scrolled Window 滚动窗口 一个滚动窗口控件 这是一个容器,如果愿意也可以连接信号,the scrolling should be taken care of automatically.
Gtk Viewport Gtk视角 创建一个视角 作者对这个控件不是很熟,看API。

论坛徽章:
0
6 [报告]
发表于 2005-11-24 19:07 |只看该作者
控件更多的细节: Gtk+附加

注意下面没有列出全部控件,在Glade未包含的库里也有可用的控件。没有列出每个控件的所有函数。如果需要这些信息请到这个教程的 库部分。
Gtk+附加
Image 名称 目标 函数及参考
Gtk Horizontal Scale 水平刻度 创造一个水平滑块 使用它可以允许通过滑动刻度条来选择一定范围的数字。很象滚动按钮(spin button),你可以设最小值、最大值、最初数值,单步增幅及其它。
Gtk Vertical Scale 垂直刻度 创造一个垂直滑块 和水平刻度一样,只不过是垂直的。
Gtk Horizontal Ruler 水平尺子 创造一把水平尺子 只是简单地放置一把水平尺子。可以根据自己的意愿设置尺子的刻度。
Gtk Vertical Ruler 垂直尺子 创造一把垂直尺子 很象水平尺子,只是垂直放置。
Gtk Alignment Widget 排列控件 创造一个控件,在它里面可以设置子控件的排列。 这是一个容器控件,在里面你可以准确地设置子控件的位置。 (基于容器控件的尺寸)。
Gtk Event Box 事件盒 这个控件可以捕获事件 这个控件允许你为另一个没有窗口的控件捕获事件。
Gtk Calendar 日历 创造一个日历控件 你可以用 gtk_calender_get_date()来获得用户选择的日期。你也可以用不同的信号如day_selected等来标记日期及其它。
Gtk Progress Bar 进度条 显示事件进度的条 可以设为显示动态事件(如前后移动的条)或事情完成百分率。如果设为百分比模式,用gtk_progress_set_percentage()或gtk_progress_set_value()来更新。.
Gtk Layout 布局 创造一个布局控件 这是一个容器控件,你可以布置其它控件。我自己对它不熟悉。
Gtk Aspect Frame 方向框架 创造一个框架,里面的子控件可以保持它的方向 这是一个容器控件,可以控制子控件(如放在里面的控件) 的方向。可以设置在Glade属性窗口设置方向比率。
Popup Menu Icon 弹出菜单 创造一个弹出菜单 典型地用在当用户在什么上面点击右键。至少从Glade角度,这个菜单很象菜单条上的下拉菜单。
Gtk Arrow 箭头 创造一个箭头 只是显示一个指向四个基本方向其中之一的箭头。
Gtk Curve Gtk曲线 能被用户改变的曲线 更多信息请看文档,这是一个专业控件,将来会被移出gtk+库。
Gamma Curve Gamma曲线 可编辑的gamma曲线 更多信息请看文档。它被用来在GIMP里编辑 gamma曲线,是一个专业控件。最终它会被移出gtk+到另一个库。
Horizontal Scrollbar 水平滚动条 一个水平排列的滚动条 没有什么可说的,它是一个滚动条。
Vertical Scrollbar 垂直滚动条 一个垂直排列的滚动条 另一个滚动条。
Gtk Color Selection Widget 颜色选择 控制颜色选择的控件 这是颜色选择对话框的核心(见教程 Gtk+基本控件)。你可以使用color_changed信号,gtk_color_selection_get_color()及其它函数。
Gtk Font Selection Widget 字体选择控制字体选择的控件这是字体选择对话框的核心(见Gtk+基本控件)。使用gtk_font_selection_get_font(), gtk_font_selection_get_font_name()及其它。
Input Dialog 输入对话框 允许配置为XInput扩展设备的控件 见gtk+文档。
Custom Widget 定制控件 定制控件放置的地方 如果你在使用不是Glade一部分的定制控件,可以用它为你的控件插入一个放置的地方。


控件更多的细节:Gnome

Gnome控件用于标准化gnome界面。如果你正在创建一个Gnome程序最好使用它们。同Gtk+控件相比,它们简化一些东西,允许你把你的程序与Gnome资源及其它东西连接起来。

注意下面并不是控件完整的列表。 在Glade未包含的库里也有可用的控件。没有列出函数 参数,也没有列出每个控件的所有函数。如果需要这些信息请到这个教程的 库部分。
Gnome
图像 名称 目标 函数及参考
Gnome Application Window 程序窗口 创建一个标准化的gnome程序窗口 你需要连接菜单和工具条上部件的信号到处理函数。详见以上关于菜单和工具条部分。
Gnome About Dialog 关于对话框 创建一个gnome关于对话框 不需要做任何事情,只要填上内容(版权、作者等)。按钮信号已被自动处理。
Gnome App Bar Gnome程序条创建一个标准gnome程序条这是一个程序条,把stock载入到Gnome程序窗口底部。在Glade属性窗口你可以设为显示一个进度条和一个状态消息的区域。这个区域可以用来给用户状态信息。函数中的gnome_appbar_push()和gnome_appbar_pop()处理这个。它也有小缓冲区,更多信息见Gnome参考手册。
Gnome Druid Gnome Druid 创建gnome druid系列的控件 当程序第一次运行时,Gnome Druid用来使用用户按他们的喜好定制程序。你需要指定需要多少页,再用属性窗口为每个页设置属性及其它。需要连接到finish、prepare、 cancel等信号。同时在druid控件里加入标准页里你所需要的文本框。
Gnome Color Picker Gnome颜色选择器创建一个能打开gtk颜色选择对话框控件的按钮这个控件是一个按钮,能显示已选择的颜色和缺省颜色。使用不同的 gnome_color_picker_get_*()和 gnome_color_picker_set_*()函数来处理这个控件里的颜色。连接到本控件的信号是color_set。
Gnome Font Picker Gnome字体选择器创建一个能打开gtk字体选择对话框控件的按钮这个控件创建一个按钮,能打开字体选择对话框。它同时也显示当前的字体。使用 gnome_font_picker_get_font()、 gnome_font_picker_get_font_name()等。连接到本控件的信号是 font_set。
Gnome Icon Entry Gnome图标输入框 创建一个'图标选择器'按钮 这个控件创建一个按钮,能显示当前图标,点击能打开一个图标选择器。使用gnome_icon_entry_get_filename()等函数来控制这个控件。
Gnome Href Button Gnome超级连接 创建一个连接到网页的按钮 这个控件是一个按钮,当点击会运行用户缺省浏览器并打开一个网页。你可以用gnome_href_set_url(), gnome_href_set_label()改变标签及地址。
Gnome Entry Box Gnome输入框 创建一个下拉输入框,并自动管理"历史"。 这是一个标准下拉框,不过输入历史记录被Gnome资源管理及维护。可以使用标准下拉框信号及函数,也可以使用任何 gnome_entry_*()函数之一。
Gnome File Entry Gnome文件输入框 创建一个下拉框,'浏览'键用来查找文件 有一个 browse_clicked信号,可以用来改变通常打开的文件选择对话框。你也需要连接到gtk_entry信号(当改变了一些东西)及其它。
Gnome PixMap Entry Gnome位图输入框 创建一个位图预览和输入控件来选择位图 这个控件显示一个所选位图的预览,需要的话输入框部分返回一个文件名(它是一个简单的gnome文件输入控件)。
Gnome Date Edit Gnome日期编辑创建一个可处理的日期和时间控件可以连接到date_changed和time_changed信号。注意它有一个弹出日历按钮(内部管理)及一个下拉时间选项菜单(也是内部管理)。选择结果会显示在日期和时间输入框中。gnome_date_edit_get_date() 函数返回控件里输入的时间。记住它是C中的time_t类型。
Gnome Canvas Gnome画布 创建一个可画图的控件 我对这个控件不熟悉,它的文档需要被完成。对不起,我知道这儿有几个界面需要的控件库,当你需要这个控件它们值得一看。
Gnome Icon List 图标列表 创建一个图标列表控件 详见gnome参考手册。
Gnome Icon Selection 图标选择 创建一个图标选择控件 详见gnome参考手册。
Gnome Bonobo Control Bonobo控制 执行一个眼镜蛇控制控件 详见bonoboui文档,在这里。

论坛徽章:
0
7 [报告]
发表于 2005-11-24 19:08 |只看该作者
控件更多的细节:不推荐和已改变

这些控件要么是gtk+/gnome开发者不推荐使用,因此在新代码不会再用,要么是在 Glade1和Glade2之间逐渐消失。当我发现消失的控件已被移动到新库,我会注明的。
Deprecated
图像 名称 目标 函数和参考
Gtk List Widget 列表 创建一个列表,列表中的每一行都可以被处理。 常用信号是select_child、 selection_changed, unselect_child。函数包括 gtk_list_insert_items(), gtk_list_append_items(), gtk_list_remove_items(), gtk_list_select_item(),等。
Gtk Columned List 柱状列表 一个多列的列表这个控件允许纵向排列列表(如一个文件选择列表,可以同时显示文件名、所有者和创建时间。).你需要在属性窗口里指定选择模式。这种模式表示在窗口里能否一次性选择一个或多个条目(缺省是一个)。GtkCList有很多信号,是一个复杂的控件。详见 Gtk+参考手册。
Gtk Columned Tree 柱状树 一个多列的树 如果熟练掌握,这个控件确实很有用。但它很复杂,如果你需要在老 软件里使用它,请看指南。
Preview 预览 一个预览控件 在不推荐使用它之前我从未使用过它,因此请查看指南。
Gnome Dialog Box 对话框 用预制gnome标准的按钮创建一个对话框 需要连接句柄到按钮,你也可以改变按钮的标签和图标,或根据需要 删掉一二个。
Gnome Message Box 消息盒子 创建一个标准化的消息盒子 需要加入消息,选择消息的类型(警告、信息等),处理"ok"按钮信号。
Gnome Property Box 属性盒子 创建一个标准化窗口来处理不同的编程属性 需要处理盒子底部的按钮及其它在盒子里所创建控件的信号。 它由gtk控件创建,请看上述关于按钮等控件的部分。
Gnome Pixmap Gnome位图 从不同的资源载入和显示位图 这个控件能正确地载入、改变大小和创建不同类型的图片。
消失
Gtk Label with Accelerator 带快捷键的标签 创建一个快捷键的标签 标签显示一个快捷键在右边(如Save Ctrl-S)。它用在菜单之类中。
Gtk Image Widget 图片控件 创建一个可以放一幅图片的控件 这个控件内有一个图片,可以被一个程序处理。
Gnome Number Entry Gnome数字输入框 用计算器按钮创建一个数字输入框 这个控件有一个计算器按钮,让用户把计算结果直接加入输入框中。 它不作任何限制检查。用gnome_number_entry_get_number()来获取数字
Gnome Dial 拨号 创建一个拨号控件 这是一个类例拨号,象一个老式收音机调谐器拨号。 它只能被设为查看,或把它转为一个数值。使用 gtk_dial_get_percentage(), gtk_dial_set_percentage(), gtk_dial_set_value(), and gtk_dial_get_value()来处理数字。
Gtk Clock 时钟 创建一个数字时钟计数或显示准确时间你可以在Glade属性窗口来设置显示格式。要用它做为计时器,在属性窗口设置秒和时间间隔。Gtk_clock_start() 使时钟运行,你需要在一些事件中调用它(如一个ok按钮或其它),gtk_clock_stop()停止。
Gnome Calculator Gnome计算器 创建一个计算器控件 你可以用result_changed信号来获得结果。 使用gnome_calculator_get_result()函数来实际获取它。
Gnome Less Gnome Less 创建一个控件来显示一个文件或流。这个控件象unix的'more'命令。用户可以浏览一个文本文件。可以在Glade属性窗口指定字体,用gnome_less_show_file() 来显示文件, gnome_less_show_filestream()来显示文件流等等。
Gnome Paper Selector Gnome纸张选择器 为打印创建一个纸张选择控件 在你的代码中,找到这个控件,用不同的 gnome_paper_selector_get_*()函数来把选择结果传到你的打印代码中。
Gnome Animator Gnome动画 创建一个控件,可以把动画加入到程序 查看文档,因为我对它不熟。




摘要和资源: 用Glade2开发图形用户界面

希望这个教程会让你朝正确的方向来学习使用Glade。对下一步,对一个初学者我建议以下资源。
网上有一些Glade, Gtk+和Gnome资源。 需要帮助请看以下:

* Glade主页
* Gnome开发者的资源
* Gtk+ 参考手册
* Gdk 参考手册
* Glib 参考手册
* Libglade 参考手册
* Gnome用户 界面库参考指南

glade邮件列表在http://lists.ximian.com/mailman/listinfo/glade-users. 它是一个很好的资源。

Havoc Pennington写了一本《Gtk+/Gnome Application Development》。这本书是另一个关于Gtk+开发的很好的信息资源。虽然它完全没有提到Glade,它阐述了控件如何工作,参数是什么,如何设计及实现一个复杂的程序,glib 提供什么及其它有趣的内容。我强力推荐它。如果可以就买它,如果不行这儿有一个开源的html版本在这里。



作者:

这个教程由Rikke D. Giles编写,是KPLUG的一部分,是在Linuxnorthwest上礼物的一部分,也是为更多写作准备工作的一部分。
版权:

这个教程一系列网页版权归Rikke D. Giles所有。教程的任何故障和问题请通知她到rgiles@users.sourceforge.net.
Glade:

Glade由Damon Chaplin编写和维护,加油!
致谢:

控件图片来自Glade的截图和Glade提供的png文件。其它图片由作者截图。

我使用gvim来做所有的编码工作。在www.gvim.org能找到它。

我使用blufish来作html编辑。它是一个很好的编辑器,在bluefish.openoffice.nl。
Insipiration:

感谢KPLUG的支持。You guys ROCK! 感谢我的 sig_other,能够容忍家里这样一个geek。还要感谢我的妈妈,虽然她不懂一点编程或计算机,从头到尾是个geek。She _gets_ why I do this.

论坛徽章:
0
8 [报告]
发表于 2005-11-24 19:10 |只看该作者
10000字限制,真烦人,累死俺了

论坛徽章:
0
9 [报告]
发表于 2005-11-24 21:18 |只看该作者
正在学GTK  谢谢楼主了

论坛徽章:
0
10 [报告]
发表于 2005-11-24 22:57 |只看该作者
原帖由 elechi 于 2005-11-24 21:18 发表
正在学GTK  谢谢楼主了



去俺Blog上有很多Gtk+的入门教程,当然更详细的参考http://www.gtk.org/
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP