最近在用GTK写一些工具,所以写一个基础教程系列,总结学习成果。

简介

GTK是一款开源的、面向多平台的GUI工具箱,其英文全称为GIMP Toolkit。最初是Peter Mattis 和 Spencer Kimball 为GNU Image Manipulation Program (GIMP)编写,用来替代付费的Motif。在后续的发展中,它已经成为通用的GUI库,应用于越来越多的程序,Linux平台的图形应用程序的半壁江山都是使用GTK编写的。

GTK的英文全称

GTK的英文全称,让我想到了GCC。GCC最初定位于GNU C Compiler,但随着支持的编译器越来越多,它的定义已经包不住编译器的多样性,所以现在改成了GNU Compiler Collection。这样看来,是不是GTK的名字也得换换了,毕竟现有的名字很局限。

GTK的语言绑定

GTK是使用C语言写的,所以其原生API都是面向C的,同时GTK的一大特点是,在C语言层面实现了面向对象的特性。如果你是用C++语言作为开发语言、调用GTK的C接口的话,使用会稍显繁琐,这是语言层面的差异,跟框架关系不大。正是为了避免不同语言调用C的繁琐,GTK提供了多语言的绑定,为不同的语言提供同等抽象级别的语言调用,这样C++程序员就可以直接调用C++的语言绑定,使用方式友好。

GTK的授权

GTK是完全免费的,而且基于LGPL协议,这可以保证私有软件通过链接使用GTK可以不把软件源代码开放,对商业应用较友好,这跟GPL协议是不一样的。也正是LGPL协议,使得早些年Gnome(基于GTK编写)风头胜过KDE(基于QT编写)。

GTK的跨平台

GTK是跨平台的,支持Unix类的系统、Windows,甚至手机平台。之前我专门有篇文章介绍了在Windows下的环境搭建,C语言的开发环境的搭建还是非常容易的。

GTK vs GTK+

关于名字。从网上的资料上,你可以看到GTK+的字眼,这个加号官方是有描述的:

The "plus" was added to "GTK" once it was moved out of the GIMP sources tree and the project gained utilities like GLib and the GTK type system, in order to distinguish it from the previous, in-tree version.

大意是:GTK从GIMP独立出来之后,加入了一些GLib和GTK类型系统的支持,为了和GIMP代码树中的版本区分,所以带上加号,这一区分就是好多年,给广大的人民群众带来了不小的认知麻烦。在今年,官方终于决定把加号去掉,以后直接叫GTK。

GTK的发布版本

关于版本。现在开源的大环境是采用刷版本的方式,像火狐浏览器,谷歌浏览器版本蹭蹭的涨。之前GTK一直采用小步慢跑的版本方式,估计也快要刷版本了,下面引用一篇旧闻:

GNOME开发者在多伦多举办的GTK会议上讨论了新的Gtk发布方案,针对Gtk 3.x系列中的问题,开发者提议加快大版本的发布速度:每两年发布一个大版本如 Gtk 4、Gtk 5和Gtk 6,每6个月发布一个与旧版本不兼容的小版本,如Gtk 4.2、Gtk 4.4和Gtk 4.6。这项计划意味着Gtk 4.0不是我们将称之为Gtk 4的最终稳定API。新的大版本能与旧的版本并行安装,如Gtk 4 和Gtk 3能安装在一个系统中,但不兼容的小版本不能,它们使用了相同的pkg-config名字和头文件目录。每一个连续小版本的API将逐渐成熟稳定,也就是说Gtk 4.6发布时API将最终稳定下来,Gtk 4.6可以称之为 Gtk 4了。使用Gtk的开发者可以选择跟随稳定的版本。

为什么选择GTK

  • 免费

    这条最实在。大的组织,比如公司,也是很注重成本的;小的个人,财务的承受能力也是有限的,这是GTK的诞生的原因。而且,很多软件授权真的不便宜。

  • 语言绑定多

    这是GTK的重大优势之一。GTK支持gobject-introspection,大大简化了语言绑定的编写。GTK的Haskell绑定haskell-gi,也得益于这一条。其他语言框架,比如QT,虽然很优秀,但提供的语言绑定实在是太少了,或者是语言绑定支持的完成度不高,与GTK差距不小。之前我推荐过两款国产GUI框架:duilib和nana,即使非常喜欢,但因为没有Haskell的绑定,只能作罢。

    以下是官方列出的不完全列表:

图片描述

  • 稳定性好

    这点也需要特殊说明一下。在05年接触Linux那会,以及随后的几年,Gnome桌面环境在稳定性方面完胜KDE,KDE桌面崩溃就是家常便饭,当然这不一定就是由GTK和QT的稳定性造成的,但的确给我的选择带来了影响。所以这些年一直在用Gnome桌面。

    抛去上面不论,GTK的稳定性也是极好的。

  • 开放源代码

    GTK的授权要求把相关更改的代码开放,这使得改动可以为大家享用,这也是开放源码带来的好处。开放源码的项目,个人同样可以参与,这样可以提高自己的水平,为社区做点贡献。

  • 跨平台

    现在很多GUI框架都是跨平台的,这没有什么显摆的。但当你有特殊需求时,才知道跨平台是多么重要。

请继续关注我的公众号文章
图片描述


ideami
91 声望11 粉丝