GTK+
2010-09-24 15:09:28 阿炯

GTK(GIMP Toolkit)是一套跨多种平台的图形工具包,按LGPL许可协议发布的。虽然最初是为GIMP写的,但目前已发展为一个功能强大、设计灵活的一个通用 图形库。特别是被GNOME选中使得GTK+广为流传,成为Linux下开发图形界面的应用程序的主流开发工具之一,当然GTK+并不要求必须在 Linux上,事实上目前GTK+已经有了成功的windows版本。



GTK+ 是一种图形用户界面(GUI)工具包。也就是说,它是一个库(或者,实际上是若干个密切相关的库的集合),它支持创建基于 GUI 的应用程序。可以把 GTK+ 想像成一个工具包,从这个工具包中可以找到用来创建 GUI 的许多已经准备好的构造块。

GTK 实质上是一个面向对象的应用程序接口 (API)。尽管完全用 C 写成的,但它是基于类和回调函数 (指向函数的指针) 的思想实现的。

还有一个名为 GLib 的第三个组件,包含一些标准函数的替代函数,以及一些处理链表等数据结构的函数等。这些替代函数被用来增强GTK 的可移植性,因为它们所实现的一些函数在其它 Unix 系统上未实现或不符合标准,比如 g_strerror()。一些是对 libc 的对应函数的增强,比如 g_malloc() 具有增强的调试功能。

最初,GTK+ 是作为另一个著名的开放源码项目 —— GNU Image Manipulation Program (GIMP) —— 的副产品而创建的。在开发早期的 GIMP 版本时,Peter Mattis 和 Spencer Kimball 创建了 GTK(它代表 GIMP Toolkit),作为 Motif 工具包的替代,后者在那个时候不是免费的。(当这个工具包获得了面向对象特性和可扩展性之后,才在名称后面加上了一个加号。)

GTK+ 的优势
不论开发的需要是什么,GTK+ 可能就是您正在寻找的答案。GTK+ 提供了许多东西:
* 它既现代,而且得到了积极的开发与维护,围绕它有一个充满活力的社区。
* 它提供了广泛的选项,用于把工作扩展到尽可能多的人,其中包括一个针对国际化、本地化和可访问性的完善的框架。
* 它简单易用,对开发人员和用户来说都是这样。
* 它的设计良好、灵活而可扩展。
* 它是自由软件,有一个自由的开放源码许可。
* 它是可移植的,从用户和开发人员的角度都是这样。

现代的且开发积极的工具包
GTK+ 是采用软件开发中的最新技术开发的,只要发现缺陷(肯定有缺陷,因为没有任何软件是完美的),开发人员就会尽力在下一版本中修补缺陷。使用现代的软件意味着,您不会陷在过时的工作中,而跟不上时代的发展。

持续的维护和开发也意味着您拥有影响工具包的未来发展方向的能力。另外,在出现新的发行版时,会引入基于用户反馈的新特性和新功能,而旧的问题则得到修补。

国际化、本地化和可访问性
在创建要让所有人使用的软件的时候,请记住三个关键字:国际化、本地化和可访问性(通常分别缩写为 i18n、l10n 和 a11y)。

国际化是将程序准备为被母语不是开发应用程序所采用的语言的人使用的过程,所以应用程序不依赖于对任何特定语言的任何假设。

i18n 远远不只是对程序使用的文本进行翻译。它还意味着要考虑所使用的不同脚本和字母表、不同的编写方向、显示许多语言所需要的特殊处理以及为用户提供输入文本的适当方法。不是每种语言都可以简单地把每个字母映射到键盘上的不同键,而且还必须实现更好的复杂性,例如确保在错误消息中使用正确的复数。

本地化与i18n 密切相关,因为为国际用户准备应用程序不仅仅是改变语言。程序还必须能够理解并尊重日期、货币显示、数字标注、文本排序所使用的不同习惯,以及许多可能不太注意的细节之处 —— 例如有些符号的使用,在世界的不同地方可能会被认为是不恰当的或无礼的。

正像 i18n,正确的 l10n 要求在代码中添加很多东西,而这些是事后很难轻松加入的。GTK+ 提供了针对 i18n 和 l10n 的恰当工具,会让代码(和二进制)可以在许多语言和地域上不加修改地运行。切换地域所需要的就是随操作系统(针对 l10n)或者一个可独立于实际的程序进行处理和发布的翻译文件(针对 i18n)一起发布的一组数据。带来的灵活性会得到开发人员、翻译者和用户的热爱。

可访问性 是让每个人都可以使用您的程序。有些用户的视力不佳,有些人可能不能用键盘或鼠标,而有些人可能只能移动他们的眼睛。要确保每个想使用您的应用程序的用户都能使用,需要做许多工作。幸运的是,GTK+ 提供了一个途径,可以通过一个完善的预先存在的 a11y 框架,立即得到这方面的支持,而您这边几乎什么工作也不需要做。使用这个框架(它是UNIX® 系统上的事实标准),可以把应用程序带给各类用户。

以上三点可能是使用工具包的充足理由 —— 特别是 GTK+,它在这三个领域都有优秀的支持。这个支持绝不完美,但在同类软件中是最好的,而且把这些关键字整合进应用程序的重要性并没有提到应有高度。在今天的世界中,计算机无处不在,用户众多而且独特,所以不能认为一个遗漏一整群用户的应用程序是一个完整的产品。

简单易用
这一点应当很明显,但是它实际上含义丰富。工具包对用户应当容易,这样才有可能创建简单的、直觉的和乐于使用的界面,哪怕针对的是新手。创建人机交互的正确模型不是一项简单的任务,GTK+ 正是长时间工作的结果,而且是众多的甚至困难的决策的结果。

GTK+ 对于开发人员也易于使用。它允许开发人员用简单的方式说出自己想要的东西,不会用所谓正规方式给开发人员带来负担,这些正规方式是计算机为了弥补它们固有的缺乏想像力的缺陷而施加给人类的负担。

设计良好、灵活和可扩展
编写 GTK+ 的方式允许在不扭曲基本设计的情况下,让维护人员添加新功能、让用户利用新功能。工具包也是可扩展的,这意味着可以向其中添加自己的块,并用使用内置块一样的方式使用它们。例如,可以编写自己的控制元素,比如说用于显示应用程序处理的科学数据,并让它正确地遵照用户选择的显示风格,就像 GTK+ 自身的控件那样。

更进一步,GTK+ 是可定制的,这样就可以让它适应自己的需求。GTK+ 有一个系统,可以在所有应用程序之间复制设置,包括主题的选择。主题 是一组一同发布的定制设置,会影响 GTK+ 使用的基本控件看起来的效果,甚至某种程度上的行为方式。使用主题,可以(例如)模拟另一个操作系统的观感。

带有自由开放源码许可的自由软件
自由软件 意味着每个人不仅可以自由地获得和使用这个工具包,还可以在满足某些条件的情况下修改并重新发布它。自由开放源码许可意味着这些条件不是严格限制的,可以得到的自由程度是显著的。最重要的是,GTK+ 采用了 Lesser General Public License (LGPL) 许可,这是 GNU 许可家族中一个不太严格的许可。LGPL 允许自由地获取、修改和发布它覆盖的任何软件,只要对修改也保持自由即可。LGPL 还允许任何人使用该库提供的功能,而不 要求用户公开应用程序代码。(这对于许多工业应用来说很重要,因为由于以前的协议或许可,这种场合下一般不希望公开代码或者公开代码是显然不现实的。)使用 LGPL 许可,您既可以是开放源码社区的好伙伴也可以是好公民。

可移植
最后(但并不是最不重要),GTK+ 是可移植的。这意味着用户可以在许多平台和系统上运行它。另一方面,开发人员可以把软件提供给众多用户,却只要编写一次程序,还可以使用许多不同的编程和开发平台、工具和编程语言。所有这些都可以理解为更多的潜在用户,您可以利用更好地满足需求的更广泛的技能和工具。

所有这些优势组合在一起,让 GTK+ 成为软件开发的坚实基础。有了它,就能够把注意力集中在解决实际问题上,而不必重新发明轮子,而且您也可以确信创建的应用程序会按照用户预期的方式运作、解决他们的问题,而不必创建新的应用程序。

最新版本:3.6
该版本实现了 gtk-primary-button-warps-slider 设置,可控制不同平台缩放和滚动,修复了一些小 bug。

官方主页:http://www.gtk.org/

该文章最后由 阿炯 于 2012-10-14 13:27:55 更新,目前是第 3 版。