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

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



GTK+ 是使用C语言开发的一种图形用户界面(GUI)工具包。也就是说,它是一个库或者是若干个密切相关的库的集合,它支持创建基于 GUI 的应用程序。可以把 GTK+ 想像成一个工具包,从这个工具包中可以找到用来创建 GUI 的许多已经准备好的构造块。其实质上是一个面向对象的应用程序接口 (API),尽管完全用 C 写成的,但它是基于类和回调函数(指向函数的指针)的思想实现的。GTK使用C语言开发,但是其设计者使用面向对象技术。也提供了C++(gtkmm)、Perl、Ruby、Java和Python(PyGTK)绑定,其他的绑定有Ada、D、Haskell、PHP和所有的.NET编程语言。与其他很多部件工具箱不同,GTK并不基于Xt。

另外还有一个名为 GLib 的第三个组件,包含一些标准函数的替代函数,以及一些处理链表等数据结构的函数等。这些替代函数被用来增强GTK 的可移植性,因为它们所实现的一些函数在其它 Unix 系统上未实现或不符合标准,比如 g_strerror()。一些是对 libc 的对应函数的增强,比如 g_malloc() 具有增强的调试功能。最初GTK包括一些和图形无关的常规功能,如上面提及的链表和二叉树等数据结构。这些基本功能和对象系统GObject已经合并到独立的库Glib,它被程序员专门用于开发不需要图形界面的代码库中。

Glade是一个界面设计工具,但是它也包含了一种描述GUI界面的XML语言,它和libglade一起工作就可以直接使用GTK和GNOME控件;新的Glade-3不再直接支持生成编程语言源代码。

GTK总的来说比较容易的,基本上你会C语言就能轻松上手C语言绑定的GTK。个人并不觉得在Linux上有比GTK更好的C语言的图形库。GTK和Qt是Linux中绝对的主力图形库,当然Qt是C++的绑定,所以强烈建议用GTK开发。在GTK的官方网站看developer guide,基本上看几个简单的demo就能入门GTK+了,然后自己学着写点小程序,碰到要调用API的时候去GTK网站查找其手册页。另外建议你多用Glib库,这样方便跨平台开发,而且Glib库中有很多优秀的函数,之前学C/C++碰到的需要自己写的函数可能在Glib中都有相应的函数供直接调用了。

学习GTK需要C语言和一定的面向对象知识,虽然GTK采用C开发,但却是一个面向对象的系统,其底层采用了C实现的GObject对象系统。Linux下的图形界面库有GTK+,QT和wxWidgets,并且它们都是跨平台的。采用GTK+开发Linux图形界面也有许多的其他的语言可供选择,因为它被绑定到了很多其他的语言上,如c,vala,perl,rust,javascript,python等。

优点

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

GTK最早应用于X Window System,如今已移植至其他平台,诸如Microsoft Windows、DirectFB,以及Mac OS X平台上的Quartz。

使用GTK的桌面环境

GNOME是以GTK为基础,就是说为GNOME编写的程序使用GTK做为其工具箱。
Xfce也基于GTK,但是它的应用程序并不对很多其他程序有依赖。(这就是"GNOME程序"和"GTK程序"的不同)
LXDE也基于GTK,一个尽可能减少包相依性的桌面环境。

这只是一部分,GTK也可以运行在KDE的环境下;而且GTK也可以在Microsoft Windows运行,另外还有DirectFB和ncurses。

使用GTK的窗口管理器

Metacity和Xfwm4使用GTK 2。

GTK应用程序

以下程序都是使用GTK开发、属于开源软件,可以运行于Linux/Unix,Windows,macOS等多种操作系统平台上:
Firefox-Mozilla基金会的网页浏览器
Geany-代码编辑器
GIMP-类似于Photoshop的图像处理程序
Inkscape-类似于Illustrator、CorelDraw的矢量图形绘制工具
Pidgin-支持多种协议(IRC、Gtalk、Yahoo Talk、MSN等等)的聊天工具
gcin-一种在Linux、Windows系统上常见的输入法平台


国际化、本地化和可访问性

在创建要让所有人使用的软件的时候,请记住三个关键字:国际化、本地化和可访问性(通常分别缩写为 i18n、l10n 和 a11y)。国际化是将程序准备为被母语不是开发应用程序所采用的语言的人使用的过程,所以应用程序不依赖于对任何特定语言的任何假设。i18n 远远不只是对程序使用的文本进行翻译。它还意味着要考虑所使用的不同脚本和字母表、不同的编写方向、显示许多语言所需要的特殊处理以及为用户提供输入文本的适当方法。不是每种语言都可以简单地把每个字母映射到键盘上的不同键,而且还必须实现更好的复杂性,例如确保在错误消息中使用正确的复数。

本地化与i18n密切相关,因为为国际用户准备应用程序不仅仅是改变语言。程序还必须能够理解并尊重日期、货币显示、数字标注、文本排序所使用的不同习惯,以及许多可能不太注意的细节之处 —— 例如有些符号的使用,在世界的不同地方可能会被认为是不恰当的或无礼的。正像 i18n,正确的 l10n 要求在代码中添加很多东西,而这些是事后很难轻松加入的。GTK+ 提供了针对 i18n 和 l10n 的恰当工具,会让代码(和二进制)可以在许多语言和地域上不加修改地运行。切换地域所需要的就是随操作系统(针对 l10n)或者一个可独立于实际的程序进行处理和发布的翻译文件(针对 i18n)一起发布的一组数据。带来的灵活性会得到开发人员、翻译者和用户的热爱。

可访问性

是让每个人都可以使用这些程序。有些用户的视力不佳,有些人可能不能用键盘或鼠标,而有些人可能只能移动他们的眼睛。要确保每个想使用您的应用程序的用户都能使用,需要做许多工作。幸运的是,GTK+ 提供了一个途径,可以通过一个完善的预先存在的 a11y 框架,立即得到这方面的支持,而您这边几乎什么工作也不需要做。使用这个框架(它是UNIX® 系统上的事实标准),可以把应用程序带给各类用户。GTK+在这三个领域都有优秀的支持。这个支持绝不完美,但在同类软件中是最好的,而且把这些关键字整合进应用程序的重要性并没有提到应有高度。在今天的世界中,计算机无处不在,用户众多而且独特,所以不能认为一个遗漏一整群用户的应用程序是一个完整的产品。

简单易用

这一点应当很明显,但是它实际上含义丰富。工具包对用户应当容易,这样才有可能创建简单的、直觉的和乐于使用的界面,哪怕针对的是新手。创建人机交互的正确模型不是一项简单的任务,GTK+ 正是长时间工作的结果,而且是众多的甚至困难的决策的结果。GTK+ 对于开发人员也易于使用。它允许开发人员用简单的方式说出自己想要的东西,不会用所谓正规方式给开发人员带来负担,这些正规方式是计算机为了弥补它们固有的缺乏想像力的缺陷而施加给人类的负担。

设计良好、灵活和可扩展

编写GTK+的方式允许在不改变基本设计的情况下,让维护人员添加新功能、让用户利用新功能。工具包也是可扩展的,这意味着可以向其中添加自己的块,并用使用内置块一样的方式使用它们。例如,可以编写自己的控制元素,比如说用于显示应用程序处理的科学数据,并让它正确地遵照用户选择的显示风格,就像 GTK+ 自身的控件那样。更进一步来讲,GTK+ 是可定制的,这样就可以让它适应自己的需求。它有一个系统,可以在所有应用程序之间复制设置,包括主题的选择。主题是一组一同发布的定制设置,会影响 GTK+ 使用的基本控件看起来的效果,甚至某种程度上的行为方式。使用主题可以模拟另一个操作系统的观感。

带有自由开放源码许可的自由软件

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

可移植

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

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

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

最新版本:4.0
2020年12月17日,负责发布工作的 GTK 团队成员 mclasen 感慨道:“2020年是漫长的一年,没有比用大版本更新来告别2020的更好方式了,所以 GTK 4.0 今天正式发布”。自2016年11月发布 GTK 3.89.1 以来,GTK 开发者为项目添加了 18000 多个提交,并发布了 20 多个开发版本。因此,GTK 4.0 是一个凝聚了大量开发者时间和精力的重要版本。开发团队表示,目前 GTK 4.0 已处于稳定阶段,GTK 3 在“可预见的未来”将会继续维护和更新,而 GTK 2 即将 EOL,计划在未来几天发布一个最终的 2.x 版本,此后不再受支持。因此建议开发者将 GTK 2 应用程序移植到 GTK 3 或 4。GTK 4.0 部分更新亮点:
新的 widget 小部件以及对现有元素的重新设计
集成媒体播放支持
改进 GPU 加速功能(比如使用新的 Vulkan 渲染器)
更好的 macOS 支持
改进数据传输功能
对着色器的重大改动
Vulkan 之外的 OpenGL 渲染改进
更好的 Windows 支持,更多详情查看发行公告

最新版本:4.2
GTK 4.2 已于2021年3月末发布,更新内容包括修复错误、改进 API,以及添加新功能。例如增加了新的 GL 渲染器;改进 GTK Toolkit 处理组合键和死键序列的方式; 改进构建系统,以便在 Windows 和 macOS 上编译 GTK;以及一个全新的 API 参考,它由语言绑定也使用的相同内省数据 (introspection data) 生成。新增的渲染器是 "NGL" OpenGL 渲染器,并在 Linux、macOS 和 Windows 平台上默认使用,旧的 OpenGL 渲染器暂时还在维护,可以通过环境变量覆盖 (GSK_RENDERER=gl) 来启用。

GTK4 NGL 渲染器在移动和桌面系统上有不错的性能表现,同时开发者还在继续努力优化以提供更多的功能和性能。另外在性能方面,从用于渲染内容的 GLSL 着色器到按需创建的可访问性对象,性能都得到了全面提升。另外还改进了输入处理、可移植性和构建系统功能,以及改进 GTK4 文档,更好的 Wayland 输入方法协议支持,改进滚动性能,增强文本的亚像素 (sub-pixel) 定位等。更多详情查看发行公告


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

该文章最后由 阿炯 于 2021-04-01 14:35:32 更新,目前是第 3 版。