没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
原文地址链接 www.micahcarrick.com/12-24-2007/gtk-glade-tutorial-part-1.html
作者 MicahCarrick
翻译:Binn.XWee
博客链接:
http://blog.csdn.net/xbwee
本文链接
:
http://blog.csdn.net/xbwee/archive/2009/03/28/4032652.aspx
Quick Overview of GTK+ Concepts
如果你没有任何GTK+的编程经验, 那么, 对于我将要阐述的一些概念你也许会听着犯迷
糊。不过,不用担心, 在遇到这些概念的时候我会详细讲解,以便你能很好的阅读后面
的内容。学完这一部分, 对GTK+的基本概念有所了解后, 你也许就能有效的利用Glade
进行开发了。
首先
,
GTK+并不是一门编程语言
,
而是一个开发工具套件
,
或者说是一个开发库
,
用
来进行跨平台
GUI
应用程序的开发
,
Linux
,
OSX
,
Windows
或其它任何平台都能使用
GTK+。GTK+就好比Windows上的MFC和Win32API, JAVA上的Swing和SWT,或者
Qt
(
KDE
使用的
Linux
下
GUI
开发套件
)。
尽管
GTK+
是用纯
C
语言编写的
,
但是提供了其它各种语言的捆绑
,
允许程序员选择自己
喜欢的开发语言来开发
GTK+
应用程序
,
比如
C++,Python
,
Perl
,
PHP
,
Ruby
等等
。
GTK+
开发套件基于三个主要的库
:
Glib
,
Pango
,和
ATK
,当然我们只需关心如何使用
GTK+
即可
,
GTK+
自己负责与这三个库打交道
。
Glib
封装了大部分可移植的
C
库函数
(允许你的代码移植到
Windows
和
Linux
上运行)。
使用
C
或
C++
时,将大量使用
Glib
库
函数
,
在我们用
C
语言的具体实现过程中我会详细解释它们
。高级语言如
Python
和
Ruby
却不用担心
Glib
的使用
,
因为它们有自己的标准库提供了相应的功能
。
GTK+
及相关的库时按照面向对象设计思想来实现的, 至于这时如何实现的现在并不重
要,
不同的编程语言有不同的实现方法, 重要的是要知道
GTK+
使用面向对象编程技术
即可(是的, 即使是 C实现的)。
每一个
GTK+
的
GUI
元素都是由一个或许多个 “
widgets
”对象构成的
。
所有的
widgets
都从
基类GtkWidget派生。
例如,
应用程序的主窗口是GtkWindo w类widget, 窗口的工具条是
GtkToolbar
类
widget
。一个
GtkWindow
是一个
GtkWidget
,但一个
GtkWidget
兵不是一个
GtkWindow,子类widgets继承自父类并扩展了父类的功能而成为一个新类
,
这就是标准
的面向对象 编程
OOP(ObjectOrientedProgramming)
思想
。
我们可以查阅
GTK+
参考手册找到
widgets
直接的继承关系
。
对于
GtkWindow
它的继承链看
起来像这样
:
GObject
+----GInitiallyUnowned
+----GtkObject
+----GtkWidget
+----GtkContainer
+----GtkBin
+----GtkWindow
因此,
GtkWindow
继承自
GtkBin
,
GtkBin
继承自
GtkContainer
, 等等。在第一个程序中,
你不需要担心GtkWidget对象。 各widget之间的继承链之所以重要是因为当你查找某个
widget
的函数, 属性和信号时, 你应该知道它的父类的函数,属性和信号也被此
widget
继
承了,可以直接使用。在第二部分讲述此实例的代码时, 你能更清楚的认识到这一点。
我们来看命名规则, 命名规则带来的好处是非常便于使用。我们能够清楚 的看出对象或
函数是哪个库中的。以
Gtk
开头的所有对象都是在
GTK+
中定义的。 稍后我们会看到类似
Glade
XML以Glade开头的是Libglade库对象或函数, GError以G开头的在GLib库定义。所
有Widgets类都遵循标准camelcase命名习惯。所有操作函数都以下划线组合小写字母单词
命名。如gtk_window_set_title()设置GtkWindow对象的标题属性。
你需要的所有参考文档都可以从以下网站获得
:
library.gnome.org/devel/references,
GTK+ and Glade3 GUI Programming Tutorial - Part 1
2009年3月27日
23:38
分区
GTK+GNOME
的第
1
页
不过, 使用
Devhelp
更方便, 它甚至可以作为一个包来分发。
Devhelp
可以浏览或搜索任
何安装在你系统上的库的相关文档, 当然前提是你必须安装了这些文档。
Introduction to Glade3
Glade是一种开发GTK+应用程序的 RAD(RapidApplicationDevelopment)工具
。
Glade自身就是一个GTK+应
用程序,因为它就是用GTK+开发出来的^_^Glade用来简化 UI控件的设计和布局操作
,
进行快速开
发。(译者注:当然
,还不仅如此,
Glade的设计初衷是把界面设计与应用程序代码相分离
,
界面的修改
不会影响到应用程序代码
)Glade
设计的界面保存为
glade
格式文件,它实际上是一种
XML
文件
。
Glade
起先能根据创建的
GUI
自动生成
C
语言代码(你仍然能找到此类相关的实例
),
后来可以利用
Libglade库在运行时动态创建界面
,
到了Glade3,这些方法都不赞成使用了
。这是因为,
Glade需要做的唯
一的事就是生成一个描述如何创建GUI的glade文件。这给编程人员提供了更多的灵活性和弹性
,
避免了用
户界面部分微小的改变就要重新编译整个应用程序
,
同时其语言无关性
,
几乎所有的编程语言都可以使用
Glade。
Glade3进行了重新设计, 与之前的版本如 Glade2有巨大的改变。2006年Glade3.0发布, 你可以自由获取最
新版本进行开发。软件包管理器如 aptitude等应该都有Glade3的安装包, 不过请注意:有个数字 3,因
为
"glade"
是老版本的
Glade2
,
"Glade‐3"
或
"Glade3"
才是新版本。 你也可以从
glade.gnome.org
下载。
Getting Familiar with the Glade Interface
启动
Glade3
, 让我们来看看其主界面
:
左边的是"Palette"就像是一个图形编辑程序
,
可以用它上面的GtkWidgets来设计你的用户界面
。中间部分
(刚启动时是空白一片
)是
"Editor"所见即所得的编辑器
。在右边,
上部是"Inspector",下部是widget
"Properties"
。
Inspector
以树形显示当前创建的控件的布局
,
可以对控件进行选择
。我们通过 Properties
中各
项内容来设置widgets的属性
,
包括设置widgets的信号回调函数
。
我们先创建一个顶层窗口并保存
。点击
Palette上"Toplevels"分组框中的 GtkWindow图标
,
你会看到一个灰
色窗口出现在Glade中间的 Editor区域。这是GtkWindow的工作区:
分区
GTK+GNOME
的第
2
页
窗口管理器
(如
GNOME)会自动加上窗口标题
,
关闭按钮等
,
因此我们编辑时看不见
。使用
Glade时, 我
们总是需要首先创建一个顶层窗口
,典型的是创建一个
GtkWindow。
以
"tutorial.glade"
文件名保存工程。这个文件是一个
XML
文件, 你可以在文本编辑器中打开它:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
<!--Generated with glade3 3.4.0 on Tue Nov 20 14:05:37 2007 -->
<glade-interface>
<widget class="GtkWindow" id="window1">
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK |
GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<child>
<placeholder/>
</child>
</widget>
</glade-interface>
你看,这就是一个简单的XML文件, 在part2中我们会用C语言调用Libglade库来解析这个XML文件并在运行
时生成 UI。XML文件很容易用Python应用程序或其它任何语言来解析。Glade能在修改过程中自动保存到该
文件。退出文本编辑器,回到
Glade
我们继续。
Manipulating Widget Properties
现在
,Glade
的
Editor
区显示的是一个空的
Gtk
Window widget。我们来修改它的属性
。在
Properties面板
,
你会看到4个选项卡:'General', 'Packing', 'Common',
和 'Signals'。我们先来谈谈前面的两个。
GtkWidgets
有许多属性,这些属性定义了它们的功能和现实方式
。
如果你查阅一下
GTK+
的开发参考文档
,
找到
GtkWidget
的
"Properties"
一项
,
列出了
GtkWindow
的特有属
性
,
这些在Glade属性面板的"General"选项卡中
,
并且每个widget的属性都会不一样
。
widget属性名称是我
们的应用程序直接获取的信息
,
把此
GtkWindow
的
"name"
由
"window1"
修改为
"window"
。添加
"GTK+Text
Editor"到"WindowTitle"属性
:
分区
GTK+GNOME
的第
3
页
我们稍后讲述
"Packing"
, 先来看看
"Common"
, 这里也包括属性设置
,
不过我们不能在开发人员参考文档
中相应的widget属性下看到它们,这是因为这些属性是继承自父类的属性
。在参考文档的
"Object
Hierarchy"里你将会看到GtkWindow的父类GtkContainer, 连接到GtkContainer属性项你将会看到一个"border‐
width"
,而在
Glade
的属性面板中
GtkWindow
继承了这个属性
,
你可以在
"Common"
选项卡底部找到
。我们
以后会讲到GtkContainer,到这里
,
你应该清楚地知道对象继承链是多么重要了
。因为大部分
widgets都从
GtkContainer
继承
,
因此
Glade
把它的属性放到了
"Common"Tab
下
。
参考文档的"ObjectHierarchy", GtkContainer由GtkWidget继承。链接到GtkWidget, 你会看到其大部分的属
性都列在了Glade属性面板的"Common"tab中。这些属性是所有GTK+widgets的公共属性, 因为它们都继承
自
GtkWidget
。
Specifying Callback Functions for Signals
当某些对程序员有意义的事情发生时
,
控件对象就发出一个信号
"signal"
。这同
Visual
Basic
中的
"events"
类似。当用户与界面进行交互时
,
界面元素发出相应的信号
,
程序员
可以决定哪些信号需要捕获并连接到一个回调函数
,完成某些任务。
我们遇到的第一个信号
,也是你在所有
GTK+
应用程序中都会碰到的
,是由
GtkObject
发出
的
"destroy"
信号。
当一个
GtkObject
对象销毁时就发出
"destroy"
信号。这非常重要
,因为当
用户通过点击一个
widget
顶部的
"X"
来关闭时
,
widget
就销毁了。我们需要捕获这个信号
并正确地退出我们的应用程序
。在我们正式为此
GUI
写代码时做这件事是最好的
,
不过先
得在
Glade
中指定响应
"destroy"
信号的具体函数
。
切换到属性面板的"Signals"tab,你将看到一个树形列表
,显示了当前
widget及其父类对象
的所有信号
。
这些与参考文档相符
。
在"Handler"列下点击灰色文本"<Typehere>"并开始编辑它
,
从下拉列表框中选
择
"on_window_destroy"
并按回车键。我们也可以键入任何名字
,
不过
Glade
提供的下拉框
列出了通用的回调函数习惯命名。这个值如何使用得看程序员如何连接信号与回调函数
。
在这里
,
我们把
GtkWindow
的
"destroy"
信号连接到
"on_window_destroy"
函数名上
。在
part2
中我们会看到这一点的
。
分区 GTK+GNOME 的第 4 页
到这里
,
我们有了一个GUI, 可以编写代码显示我们的空窗口并在点击了关闭按钮时退出
程序
,
你可以用
C
,
Python
或任何其它语言
。在此向导中,
我将会充分地向你展示如何
在编写任何代码前就用Glade3建立 起完整的GUI.不过
,
为了满足你的好奇心
,
同时也让
你了解到要实现这个
Glade
用户接口,代码将会是多么的简单
,请看代码:
In C
/*
First run tutorial.glade through gtk-builder-convert with this command:
gtk-builder-convert tutorial.glade tutorial.xml
Then save this file as main.c and compile it using this command
(those are backticks, not single quotes):
gcc -Wall -g -o tutorial main.c `pkg-config --cflags --libs gtk+-2.0` -export-dynamic
Then execute it using:
./tutorial
*/
#include <gtk/gtk.h>
void
on_window_destroy (GtkObject *object, gpointer user_data)
{
gtk_main_quit ();
}
int
main (int argc, char *argv[])
{
GtkBuilder *builder;
GtkWidget *window;
g
tk
_
init (&ar
g
c, &ar
g
v);
builder =
g
tk
_
builder
_
new ();
gtk_builder_add_from_file (builder, "tutorial.xml", NULL);
window = GTK_WIDGET (gtk_builder_get_object (builder, "window"));
g
tk
_
builder
_
connect
_
si
g
nals (builder, NULL);
g_
object
_
unref (G
_
OBJECT (builder));
gtk_widget_show (window);
g
tk
_
main ();
return 0;
分区 GTK+GNOME 的第 5 页
剩余20页未读,继续阅读
资源评论
- terrycannyfly2012-08-30还好吧,不是特别详细!
- goas2012-07-13其它地方也可以下载这个资源.要一个积分呀,好像新浪有,学习GTK中...
xbwee
- 粉丝: 33
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于keras+fasterRCNN,在VOC格式的口罩数据集上训练,检测人群中有无戴口罩python源码+模型
- push_version
- 软件自制图像批量压缩工具
- 基于深度学习的抗梯度噪声的缺陷检测器python源码+文档说明+模型的预训练
- 基于python+pytorch+mysql实现停车场车牌识别管理系统源码+文档说明
- 基于QT+MySQl+OpenCV车牌识别搭建停车场管理系统C++源码+文档说明+界面展示
- 基于深度学习的停车场收费系统-车牌识别模块python源码+文档说明+博客教学
- 空白.pages
- 基于Java+Springboot+vue的智能停车场管理系统(源代码+数据库+9000字论文) 本项目前后端不分离+部署教程
- 基于SSM写的停车场管理系统,加入了车牌识别和数据分析+源码+文档说明
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功