GTK

GTK（原名GTK+）最初是GIMP的專用開發庫（GIMP Toolkit），後來發展為Unix-like系統下開發圖形界面的應用程序的主流開發工具之一。GTK是自由軟件，並且是GNU計劃的一部分。自2019年2月6日起，GTK+改名為GTK。

**軟件架構**
GTK工具包 GTK的簡化軟件架構。Pango, GDK, ATK, GIO, Cairo 和 GLib  GDK包含了對X11, Wayland, Broadway (HTTP), Quartz, 和 GDI的後端，並依賴於Cairo進行渲染。它的新SceneGraph還在開發中。
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將從項目名稱中去掉“+”號。

**GTK繪圖工具包（GDK）**
GDK是對底層窗口系統和圖形系統提供的低級函數的封裝。

**GTK場景圖工具包（GSK）**
GSK是GTK的渲染和場景圖API。GSK位於圖形控制元素（部件）和渲染之間。GSK最終在2017年3月發佈的GTK版本3.90中合併。

**GtkInspector**
GtkInspector在版本3.14中引入。 GtkInspector只能在安裝了開發包libgtk-3-dev/gtk±devel後調用。

**GUI設計器**
有幾個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**
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）的引擎。
Xfce4上的GIMP 2.0的快照

**使用**
使用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應用程序**
以下程序都是使用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，它被程序員專門用於開發不需要圖形界面的代碼。

**GTK 2**
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**
GTK hello world以C撰寫，本程序含有窗口，標題是"Hello, World".
#include 
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 Runtime Environment for Windows**
由於GTK主要是作為Unix-like系統底下的介面，在Windows使用該系統所開發的軟體時就需要用到GTK執行環境，即GTK Runtime Environment for Windows。這個軟體與GTK不同的地方在於它僅僅是為了執行軟體用途而製作，以解決Windows沒有內建GTK函式庫的問題。

**參見**
 Gtk#，GTK的.NET API。- PyGTK，GTK的Python API。- Qt- Motif- wxWidgets

**參考資料**

**外部鏈接**
  GTK主頁date=20110222211023 - Computers/Software/Operating_Systems/Graphic_Subsystems/Toolkits/Gtk/