GTK+ 2.0 教程
GTK+ 2.0 教程
译者: huzheng,konghui,ferry,carton,yang_yi,ddd,tingle
版本号: V_0.1.0 2002 年 6 月 25 日
本文是有关通过 C 语言接口使用 GTK (the GIMP Toolkit) 的教程。
Table of Contents
中文版说明
简介
从这里开始
用 GTK 来写 Hello World
编译 Hello World 程序
信号和回调函数的原理
事件
Hello World 详解
继续
数据类型
深入探索信号处理函数
改进了的 Hello World
组装构件
组装盒的原理
盒的细节
组装示范程序
用表组装
表组装示例
构件概述
类型转换
构件的组织
无窗口构件
按钮构件
一般按钮 Normal Buttons
开关按钮 Toggle Buttons
复选按钮 Check Buttons
单选按钮 Radio Buttons
调整对象 Adjustments
创建一个调整对象
轻松使用调整对象
“调整对象”的内部机制
范围构件 Range Widgets
滚动条构件 Scrollbar Widgets
- 1 -
GTK+ 2.0 教程
比例构件 Scale Widgets
创建一个比例构件
函数和信号(至少讲了函数)
常用的范围函数
设置更新方式
获得和设置调整对象
键盘和鼠标绑定
示例
杂项构件
标签 Labels
箭头 Arrows
工具提示对象 The Tooltips Object
进度条 Progress Bars
对话框 Dialogs
标尺 Rulers
状态栏 Statusbars
文本输入构件 Text Entries
微调按钮 Spin Buttons
组合框 Combo Box
日历 Calendar
颜色选择 Color Selection
文件选择 File Selections
容器构件 Container Widgets
事件盒 The EventBox
对齐构件 The Alignment widget
固定容器 Fixed Container
布局容器 Layout Container
框架 Frames
比例框架 Aspect Frames
分栏窗口构件 Paned Window Widgets
视角 Viewports
滚动窗口 Scrolled Windows
按钮盒 Button Boxes
工具栏 Toolbar
笔记本 Notebooks
菜单构件
手工创建菜单
手工菜单示例
使用套件
套件示例
无文档构件
快捷标签 Accel Label
选项菜单 Option Menu
菜单项 Menu Items
- 2 -
GTK+ 2.0 教程
复选菜单项 Check Menu Item
单选菜单项 Radio Menu Item
分隔菜单项 Separator Menu Item
分离菜单项 Tearoff Menu Item
曲线图 Curves
绘图区 Drawing Area
字体选择对话框 Font Selection Dialog
消息对话框 Message Dialog
Gamma 曲线图
图像 Image
插头和插座 Plugs and Sockets
树视区 Tree View
文本视区 Text View
设置构件的属性
超时、IO 和 Idle 函数
超时 Timeouts
监控IO
Idle 函数
高级事件和信号处理
信号函数
连接和断开信号处理函数
阻塞和反阻塞信号处理函数
发出和停止信号
信号的发射和传播
操作选中区
概述
获取选中区信息
提供选中区
拖放
概述
属性
函数
设置源构件
源构件上的信号
设置目的构件
目的构件上的信号
GLib
定义
双向链表
单向链表
存储管理
计时器
字符串处理
实用程序和错误处理函数
- 3 -
GTK+ 2.0 教程
GTK 的 rc 文件
rc 文件的功能
GTK rc 文件的格式
rc 文件示例
编写你自己的构件
概述
一个构件的剖析
创建一个复合构件
介绍
选择一个父类
头文件
_get_type() 函数
_class_init() 函数
_init() 函数
其余的...
从头创建构件
介绍
在屏幕上显示构件
表盘构件的原形
主体
gtk_dial_realize()
大小磋商
gtk_dial_expose()
事件处理
可能的增强
深入的学习
涂鸦板,一个简单的绘图程序
概述
事件处理
绘图区构件和绘图
添加XInput支持
允许扩展设备信息
使用扩展设备信息
得到更多关于设备的信息
进一步的讲解
编写 GTK 应用程序的技巧
投稿
鸣谢
教程的版权和许可声明
GTK 信号
GtkObject
GtkWidget
GtkData
GtkContainer
- 4 -
GTK+ 2.0 教程
GtkCalendar
GtkEditable
GtkNotebook
GtkList
GtkMenuShell
GtkToolbar
GtkButton
GtkItem
GtkWindow
GtkHandleBox
GtkToggleButton
GtkMenuItem
GtkCheckMenuItem
GtkInputDialog
GtkColorSelection
GtkStatusBar
GtkCurve
GtkAdjustment
GDK 事件类型
示例程序代码
Tictactoe
tictactoe.h
tictactoe.c
ttt_test.c
GtkDial
gtkdial.h
gtkdial.c
dial_test.c
Scribble
scribble-simple.c
scribble-xinput.c
术语表
中文版说明
Table 1. 本手册是由志愿者翻译完成,中文版版权归各位译者所有:
ID
E-mail
所译章节
carton carton@linux.net.cn
1
ddd
20
- 5 -
GTK+ 2.0 教程
ferry
y0f0@21cn.com
18,19
huzheng forlinux@263.net
5,7,8,9,10,11,16,17
tingle funting@163.net
4
konghui konghui@xinhuanet.com 2,3,6,12,13,14,15,21,附录 ABC
yang_yi yang_yi_cn@yahoo.com 22,23,24,25
这次翻译活动由 konghui 发起和组织。huzheng 和 konghui 做了最后的整理
和校订工作。
在线查看 打包下载
相关主页:妖光linux编程 中国linux论坛
为保证本文档自由传播,保留版权,版权归各位译者所有。
本许可授权你制作和发布本手册逐字的拷贝,但在所有拷贝上要保留本版权声
明和许可声明。
本许可授权你复制和发布本文档的修订版,在逐字的拷贝原文,包含和原版完
全一致的版权声明,并且所有修订部分也是以本许可声明发布的条件下。
如果你准备出版本文档,请联系维护者,以确保你获得本文档的最新版本。
对本文档的适用范围不作担保, 它仅仅是作为一个免费的资源提供。因此,这
里提供的这些信息的作者和维护者无法做出这些信息一定正确的保证。
简介
GTK (GIMP Toolkit) 是一套用于创建图形用户界面的工具包。它遵循 LGPL 许
可证,所以你可以用它来开发开源软件、自由软件,甚至是封闭源代码的商业
软件,而不用花费任何钱来购买许可证和使用权。
GTK 被称为 GIMP 工具包是因为最初写它是用来开发 GIMP (GNU 图像处理程序)
的,但是它现在已经被用于很多软件项目了,包括 GNOME (GNU 网络对象模型
环境)。GTK 是在 GDK (GIMP Drawing Kit) 和 gdk-pixbuf 的基础上建立起来
的,GDK 基本上是对访问窗口的底层函数 (在 X 窗口系统中是 Xlib) 的一层
封装,gdk-pixbuf 是一个用于客户端图像处理的库。
GTK 的创建者是:
- 6 -
GTK+ 2.0 教程
• Peter Mattis petm@xcf.berkeley.edu
• Spencer Kimball spencer@xcf.berkeley.edu
• Josh MacDonald jmacd@xcf.berkeley.edu
GTK 的当前维护者是:
• Owen Taylor otaylor@redhat.com
• Tim Janik timj@gtk.org
GTK 实质上是一个面向对象的应用程序接口 (API)。尽管完全用 C 写成的,但
它是基于类和回调函数 (指向函数的指针) 的思想实现的。
还有一个名为 GLib 的第三个组件,包含一些标准函数的替代函数,以及一些
处理链表等数据结构的函数等。这些替代函数被用来增强 GTK 的可移植性,因
为它们所实现的一些函数在其它 Unix 系统上未实现或不符合标准,比如
g_strerror()。一些是对 libc 的对应函数的增强,比如 g_malloc() 具有增
强的调试功能。
在 2.0 版中,GLib 又加入这样一些新内容:构成 GTK 类层次基础的类型系统
(type system),在 GTK 中广泛使用的信号系统,对各种不同平台的线程 API
进行抽象而得的一个线程 API,以及一个加载模块的工具。
作为最后一个组件,GTK 使用了 Pango 库来处理国际化文字输出。
本教程讲述 GTK 的 C 接口。还有许多其它语言的 GTK 绑定如 C++、Perl、
Python、TOM、Ada95、Objective C、Free Pascal、Eiffel、Java 和 C#。如
果你想使用 GTK 其它语言的绑定,请先查看该绑定的文档。有时这些文档会讲
一些重要的概念,然后你再来参考本教程。还有一些跨平台的 API (如
wxWindows 和 V),它们把 GTK 作为一个支持的平台。同样,先参考它们的文
档。
如果你用 C++ 来开发 GTK 应用程序,有以下几点需要注意。已有一个 GTK 的
C++ 绑定叫做 GTK-- (译者注:现在叫做 gtkmm),提供一个更符合 C++ 规范
的接口,你可以先看看这个接口。如果你由于种种原因不喜欢这种方法,还有
另外两种使用 GTK 的方法。首先,你可以只使用 C++ 中的 C 子集来调用
GTK,这样就可以使用本教程描述的 C 接口。其次,你可以用下述方法同时使
用 GTK 和 C++:把所用的回调函数定义为 C++ 类中的静态成员函数,然后仍
然使用 C 接口来调用 GTK。如果你选择后一种方法,你可以把指向要操作的对
象的指针 (即所谓的 "this")作为回调函数的 data 参数。选择哪一种方法仅
仅是个人的喜好问题,因为不管用哪一种方法,你都会得到 C++ 和 GTK。它们
都不需要特殊的预处理程序,因此你可以同时使用标准 C++ 和 GTK。
本教程试图尽可能详细地描述 GTK,但是肯定不能面面俱到。本教程假设你能
够较好的理解 C 语言,并且了解怎样编写一个 C 程序。有 X 编程经验会很有
帮助,但不是必要条件。如果 GTK 是你学习的第一个构件工具包,请告诉我们
- 7 -
GTK+ 2.0 教程
你怎样找到这个教程,以及学习时有什么困难。还有其它一些语言的绑定,如
C++、Objective C、ADA、Guile 等,但我不了解这些。
本教程仍在不断完善中。请到 http://www.gtk.org/ 查看更新情况。
我非常乐意听到你在使用本教程学习 GTK 时遇到的各种困难,并欢迎对怎样改
进此文档提出建议。更多信息请参阅投稿这一章。
从这里开始
你首先做的第一件事,当然是下载 GTK 源程序,并安装它。你总是能从
ftp.gtk.org 得到最新版本。你也可以在 http://www.gtk.org/ 上查看其它
GTK 源程序的信息。GTK 使用 GNU autoconf 配置。解压缩后,输入
./configure --help 查看选项列表
GTK 源码发布包中包含教程中所有示例的代码,每个示例中包含有 Makefiles
文件,用以方便编译。
一开始介绍 GTK,我们会尽可能从简单的程序开始。这个程序创建 200x200 大
小的窗口,没有办法退出,除非你从 shell 中将它杀掉。
#include
int main( int argc,
char *argv[] )
{
GtkWidget *window;
gtk_init (&argc, &argv);
- 8 -