GTK

GTK（原名GTK+）最初是GIMP的专用开发库（GIMP Toolkit），后来发展为Unix-like系統下开发图形界面的应用程序的主流开发工具之一。GTK是自由软件，并且是GNU计划的一部分。自2019年2月6日起，GTK+改名为GTK。 GTK 包含了一组图形控制元素（部件）；版本3.22.16包含了186个活跃的和36个废弃的部件。 GTK是用C语言编写的一个面向对象的部件工具；它使用GObject，即GLib对象系统，来实现面向对象。虽然GTK主要是为基于X11和Wayland的窗口系统设计的，但它也可以在其他平台上运行，包括Microsoft Windows（与Windows API接口），和macOS（与Quartz接口）。还有一个名为Broadway的HTML5后端。 GTK可以配置不同的显示引擎来改变绘制部件的外观。有几种显示引擎可以模仿所使用平台上的原生部件的外观。 从2005年发布的版本2.8开始，GTK开始使用Cairo来渲染大多数图形控制元素（部件）。自从GTK版本3.0开始，所有的渲染都是使用Cairo完成的。 在2018年1月26日的DevConf.cz上，GTK重要开发者Matthias Clasen介绍了GTK 4开发的当前状态，包括对GTK 3中渲染和输入工作方式的高层次解释，GTK 4 (>3.90)中正在进行的变化以及原因。在2019年2月6日，宣布GTK 4将从项目名称中去掉“+”号。 GDK是对底层窗口系统和图形系统提供的低级函数的封装。 GSK是GTK的渲染和场景图API。GSK位于图形控制元素（部件）和渲染之间。GSK最终在2017年3月发布的GTK版本3.90中合并。 GtkInspector在版本3.14中引入。 GtkInspector只能在安装了开发包libgtk-3-dev/gtk±devel后调用。 有几个GUI设计器可用于GTK。以下项目截至2011年7月仍在活跃： Glade，支持GtkBuilder，这是一个GTK内置的GUI描述格式。 Gazpacho，用Python编写的GTK工具包的GUI构建器 Crow Designer，依赖于它自己的GuiXml格式和GuiLoader库。 Stetic，作为MonoDevelop的一部分，面向Gtk#。 Gambas自版本2.0开始基于BASIC Xojo在Linux Lazarus在Linux上默认与GTK 2接口 GtkBuilder允许在不编写代码的情况下设计用户界面。界面在XML文件中描述，然后在运行时加载并自动创建对象。Glade界面设计器允许以“所见即所得”（WYSIWYG）的方式创建用户界面。用户界面的描述与使用的编程语言无关。 GTK使用C语言开发，但是其设计者使用面向对象技术。也提供了Vala、C++（gtkmm）、Perl、Ruby、Java和Python（PyGObject）绑定，其他的绑定有Ada、D、Haskell、PHP和所有的.NET编程语言。 与其他很多部件工具箱不同，GTK并不基于Xt。这一决策优劣互见：优点是GTK可以应用于其他系统，其灵活性也很强；而缺点就是它无法利用以传统方法为X11定制的X资源数据库。GTK最早應用於X Window System，如今已移植至其他平台，諸如Microsoft Windows、DirectFB，以及Mac OS X平台上的Quartz. Glade是一个界面设计工具，但是它也包含了一种描述GUI界面的XML语言，它和libglade一起工作就可以直接使用GTK和GNOME控件；新的Glade-3不再直接支持生成编程语言源代码。 提供不同的显示引擎使得最终用户可以定制外观和视觉。目前已经有一些可以模仿其他流行的平台或者工具箱（例如Windows 95、Motif、Qt或者NEXTSTEP）的引擎。 使用GTK的環境 GNOME是以GTK為基礎，就是說為GNOME編寫的程式使用GTK做為其工具箱。 Xfce也基於GTK，但是它的應用程式並不對很多其他程式有依賴。（這就是"GNOME程式"和"GTK程式"的不同。） LXDE也基於GTK，一個盡可能減少套件相依性的桌面環境。 GPE Palmtop環境和Nokia的互聯網平板電腦的框架Maemo基於GTK。 這只是一部分，另外，GTK也可以運行在KDE的環境下。而且GTK也可以在Microsoft Windows運行，另外還有DirectFB和ncurses。 使用GTK的窗口管理器 Mutter Metacity Marco Xfwm4 Muffin Gala 以下程序都是使用GTK开发、属于开源软件，可以运行于Linux/Unix，Windows，macOS等多种操作系统平台上。 Firefox－Mozilla基金會的網頁瀏覽器，在Linux下使用GTK。 Geany－代码编辑器 GIMP－类似于Photoshop的图像处理程序 Inkscape－类似于Illustrator、CorelDraw的矢量图形绘制工具 Pidgin－支持多种协议（IRC、Gtalk、Yahoo Talk、MSN等等）的聊天工具 gcin－一種在Linux、Windows系統上常見的輸入法平台 最初GTK包括一些和图形无关的常规功能，如链表和二叉树等数据结构。这些基本功能和对象系统GObject已经合并到独立的库Glib，它被程序员专门用于开发不需要图形界面的代码。 2002年3月11日，GTK2.0版正式发布。GTK 2是GTK后继版本，其新特性包括使用Pango改进的文本渲染、新主题引擎、使用ATK改进的可达性、完全转换到使用UTF-8的Unicode和更灵活的API。但是它和GTK 1不完全兼容，因此必须由程序员做移植工作。由于GTK 1更快、相对更简单或更加适合嵌入式应用，所以还被继续使用。 从GTK 2的2.8版起，它依靠程式庫Cairo完成渲染，而这引入了矢量图形的支持。 Ridley项目正在尝试统一一系列和GTK相关的库，包括libgnome、libgnomeui、libgnomeprint、libgnomeprintui、libglade、libgnomecanvas、libegg、libeel和gtkglext。 GTK hello world以C撰写，本程序含有窗口，标题是"Hello, World". #include <gtk/gtk.h> int main (int argc, char *argv[]) { GtkWidget *window; GtkWidget *label; gtk_init (&argc, &argv); /* create the main, top level, window */ window = gtk_window_new (GTK_WINDOW_TOPLEVEL); /* give it the title */ gtk_window_set_title (GTK_WINDOW (window), "Hello World"); /* Connect the destroy signal of the window to gtk_main_quit * When the window is about to be destroyed we get a notification and * stop the main GTK loop */ g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL); /* Create the "Hello, World" label */ label = gtk_label_new ("Hello, World"); /* and insert it into the main window */ gtk_container_add (GTK_CONTAINER (window), label); /* make sure that everything, window and label, are visible */ gtk_widget_show_all (window); /* start the main loop, and let it rest there until the application is closed */ gtk_main (); return 0; } 由於GTK主要是作為Unix-like系統底下的介面，在Windows使用該系統所開發的軟體時就需要用到GTK執行環境，即GTK Runtime Environment for Windows。這個軟體與GTK不同的地方在於它僅僅是為了執行軟體用途而製作，以解決Windows沒有內建GTK函式庫的問題。 Gtk#，GTK的.NET API。 PyGTK，GTK的Python API。 Qt Motif wxWidgets 4.16.3. 2024年10月4日 [2024年10月5日].  The GTK Open Source Project on Ohloh. Ohloh.net. [2014-02-17]. （原始内容存档于2013-12-08）.  Project rename to "GTK". mail.gnome.org. [2019-02-10]. （原始内容存档于2020-11-07）.  GTK+ 3 Reference Manual. [2017-07-15]. （原始内容存档于2021-06-23）.  Using GTK+ with Broadway. GNOME Developer. GNOME. [6 March 2018]. （原始内容存档于2021-06-14）.  Broadway - GitHub symbiose/symbiose Wiki. GitHub. [6 March 2018]. （原始内容存档于2023-06-28）.  GTK+ to Use Cairo Vector Engine. [2009-12-27].  Gtk: Migrating from GTK 2.x to GTK 3. docs.gtk.org. [2022-06-16]. （原始内容存档于2023-05-26） （英语）. All drawing in GTK 3 is done via Cairo.  Matthias Clasen DevConf.cz 2018 talk about GTK+ 4 (PDF). 2018-01-26 [2023-06-28]. （原始内容存档于2012-08-28）.  Introducing GtkInspector. 2014-05-15 [2023-06-28]. （原始内容存档于2014-05-17）.  Another GtkInspector update. 2014-07-11 [2023-06-28]. （原始内容存档于2014-07-14）.  Debian – Package Search Results – gazpacho. packages.debian.org. [2023-06-28]. （原始内容存档于2023-06-28）.  Nothing-personal - A development site for Crow Designer, GuiLoader and Rally - Google Project Hosting. [2014-02-17]. （原始内容存档于2013-01-24）.  Marco, MATE Desktop, 2022-12-21 [2023-01-19], （原始内容存档于2022-12-05）  Mutter, Linux Mint, 2022-12-15 [2023-01-19], （原始内容存档于2023-01-04）  Gala, elementary, 2023-01-15 [2023-01-19], （原始内容存档于2019-02-26）  维基共享资源中相关的多媒体资源：GTK GTK主页（页面存档备份，存于互联网档案馆） 开放目录项目中的“GTK”