gtk
gtk是用于构建图形用户界面的一套跨平台部件工具包,前身称 GIMP 工具箱(GIMP Toolkit),简称曾写作 GTK+。它以 C 语言编写并采用面向对象设计,提供按钮、文本框、窗口等部件以及布局管理、事件处理等设施,程序可运行于类 UNIX 平台、Windows 与 macOS,并以 GNU 宽通用公共许可证发布,允许闭源程序在免版税条件下使用。gtk 是 GNOME 桌面环境的基础库,GIMP、Inkscape 等应用也以它为界面框架。
定义
gtk 是一套开源的部件工具包(widget toolkit),用于编写图形用户界面。它提供的“部件”指按钮、文本输入框、窗口、列表等界面组件,开发者把这些部件组合起来,再挂接信号回调以响应用户操作[1]。官方文档把 gtk 描述为跨平台工具包,既可支撑小型的单一用途工具,也能支撑成套的应用程序[2]。
gtk 是自由软件,属于 GNU 工程的一部分,采用 GNU 宽通用公共许可证(LGPL)第 2.1 版或更高版本发布,因此专有软件的开发者也能在不支付许可费和版税的情况下使用它[2]。其主要开发与托管由 GNOME 项目负责,gtk 本身也是该桌面环境的底层界面库[3]。
原理
gtk 用 C 语言写成,借助 GObject 提供的对象系统实现面向对象的结构,从而在保持可移植性的同时获得继承、属性与信号机制[1]。这种设计使 gtk 容易被其他语言调用,官方列出的绑定涵盖 C++、Python、JavaScript、Rust、Go、Perl、Vala 等[1]。
从内部结构看,gtk 可分成三层。GDK 是与窗口系统对接的抽象层,负责在 Wayland、X11、Windows 和 macOS 上建立窗口并提供输入事件;GSK 把绘制操作组织成场景图,并交由 OpenGL、Vulkan 或 Cairo 后端渲染;最上层才是承载部件、布局管理与数据类型的 gtk 本体[1]。
gtk 还依赖一组支撑库:GLib 提供数据类型、主循环与通用工具,GIO 提供文件与网络的虚拟文件系统接口,Pango 负责国际化文本排版,gdk-pixbuf 负责图像载入,Cairo 负责二维矢量绘制,graphene 提供向量与矩阵运算[1]。界面外观可由主题控制,gtk 3 起主题规则以类似层叠样式表(CSS)的语法书写。
发展历程
gtk 起源于图像处理软件 GIMP。彼得·马蒂斯(Peter Mattis)对当时使用的 Motif 工具包不满,决定自行编写一套界面工具包,并在 GIMP 0.60 版中用它替换了 Motif;此后该工具包被重写为面向对象形式,改名 GTK+,首次随 GIMP 0.99 版使用。gtk 由马蒂斯、斯宾塞·金博尔(Spencer Kimball)与乔希·麦克唐纳(Josh MacDonald)于 1997 年前后共同开发,最早的稳定版 1.0 于 1998 年 4 月发布[4]。
2.0 系列于 2002 年 3 月发布,引入用 Pango 排版的文本渲染、新的主题引擎、基于辅助功能工具包的改进,并全面转向 UTF-8 字符串;该系列与 1.x 不兼容,已有程序需要移植。自 2.8 版起,gtk 2 依靠 Cairo 绘制矢量图形。
3.0 于 2011 年 2 月 10 日发布,重做了输入设备处理,改用 CSS 风格的主题描述方式,并支持在同一库内切换多种 GDK 后端。3.2 引入 Wayland 后端与名为 Broadway 的 HTML5 后端,后者让程序可在浏览器中远程操作。
4.0 于 2020 年 12 月 16 日发布,距上一主要版本约 9 年,其间累积了超过 18000 次代码提交[5]。该版本把渲染交给 GSK 场景图层,新增 Vulkan 渲染器,并引入事件控制器、布局管理器、媒体播放与可扩展列表等机制。名称中的加号于 2019 年 2 月被去掉,项目正式称 gtk。
应用
gtk 最主要的用途是桌面环境。GNOME 以 gtk 为基础,其原生程序均使用 gtk 构建;Cinnamon 源自 GNOME 3,MATE 源自 GNOME 2,两者同样以 gtk 3 作为部件工具包。Xfce、Budgie、Pantheon 等环境也建立在 gtk 之上。
在应用软件方面,使用 gtk 的代表包括图像编辑器 GIMP、矢量绘图软件 Inkscape、办公套件 LibreOffice、视频转码工具 HandBrake、音频工作站 Ardour 与 REAPER、远程桌面客户端 Remmina。跨平台工具包 wxWidgets 在 Linux 上默认也调用 gtk。
gtk 程序并不限定运行在 gtk 桌面上。只要系统中安装了相应库,它就能在 X11、Wayland 以及其他窗口环境下运行,也可在 Windows 与 macOS 上运行。此外还存在面向 DirectFB 等特殊环境的移植版本,例如 Debian 安装程序曾使用该移植。
局限
gtk 最常被提及的问题是主要版本之间缺乏向后兼容。2.0 与 1.x 不兼容,3.0 与 2.x 也不兼容,接口或主题方面的变动往往要求应用开发者和主题作者修改代码才能适配新版本。新旧版本的库可以并行安装,一定程度上缓解了迁移压力。
版本支持周期不一致也带来负担。gtk 2 已在 4.0 发布后终止支持,继续使用 2.x 的程序必须迁移到 gtk 3 或 gtk 4;gtk 3 则在其后继版本问世后仍被继续维护[5]。部分知名软件因此长期停留在旧版本,GIMP 在 gtk 4 发布时仍未完成向 gtk 3 的移植[5]。
跨平台支持方面,gtk 在非 X11 平台上的体验曾受到质疑,Wireshark 等项目正是因为对 gtk 跨平台表现不满意而转向 Qt。此外,gtk 传统上无法读取 X11 程序常用的 X 资源数据库配置,这被视为其与传统 X 程序在配置方式上的差异。
参见
参考资料
- Gtk: Overview [引用日期2026-10-29]
- GTK — The GTK toolkit [引用日期2026-10-29]
- googlesource.com 上的网页 [引用日期2026-10-29]
- GTK [引用日期2026-10-29]
- impress.co.jp 上的网页 [引用日期2026-10-29]