热门问题
时间线
聊天
视角
GTK
用來製作圖形化使用者介面的跨平台部件工具箱 来自维基百科,自由的百科全书
Remove ads
GTK(原名GTK+)最初是GIMP的專用開發庫(GIMP Toolkit),後來發展為Unix-like系統下開發圖形介面的應用程式的主流開發工具之一。GTK是自由軟體,並且是GNU計劃的一部分。自2019年2月6日起,GTK+改名為GTK。[3]
Remove ads
軟體架構



GTK 包含了一組圖形控制元素(部件);版本3.22.16包含了186個活躍的和36個廢棄的部件。[4] GTK是用C語言編寫的一個物件導向的部件工具;它使用GObject,即GLib對象系統,來實現物件導向。雖然GTK主要是為基於X11和Wayland的窗口系統設計的,但它也可以在其他平台上執行,包括Microsoft Windows(與Windows API介面),和macOS(與Quartz介面)。還有一個名為Broadway的HTML5後端。[5][6]
GTK可以組態不同的顯示引擎來改變繪製部件的外觀。有幾種顯示引擎可以模仿所使用平台上的原生部件的外觀。
從2005年釋出的版本2.8開始,GTK開始使用Cairo來彩現大多數圖形控制元素(部件)。[7]自從GTK版本3.0開始,所有的彩現都是使用Cairo完成的。[8]
在2018年1月26日的DevConf.cz上,GTK重要開發者Matthias Clasen介紹了GTK 4開發的當前狀態,包括對GTK 3中彩現和輸入工作方式的高層次解釋,GTK 4 (>3.90)中正在進行的變化以及原因。[9]在2019年2月6日,宣布GTK 4將從專案名稱中去掉「+」號。
Remove ads
GDK是對底層窗口系統和圖形系統提供的低階函式的封裝。
GSK是GTK的彩現和場景圖API。GSK位於圖形控制元素(部件)和彩現之間。GSK最終在2017年3月釋出的GTK版本3.90中合併。
GtkInspector在版本3.14中引入。[10][11] GtkInspector只能在安裝了開發包libgtk-3-dev/gtk±devel後呼叫。
有幾個GUI設計器可用於GTK。以下專案截至2011年7月仍在活躍:
- Glade,支援GtkBuilder,這是一個GTK內建的GUI描述格式。
- Gazpacho,用Python[12]編寫的GTK工具包的GUI構建器
- Crow Designer,依賴於它自己的GuiXml格式和GuiLoader庫。[13]
- 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的視窗管理員
以下程式都是使用GTK開發、屬於開源軟體,可以執行於Linux/Unix,Windows,macOS等多種作業系統平台上。
版本歷史
Remove ads
圖形無關代碼
最初GTK包括一些和圖形無關的常規功能,如鏈結串列和二元樹等資料結構。這些基本功能和對象系統GObject已經合併到獨立的庫Glib,它被程式設計師專門用於開發不需要圖形介面的代碼。
GTK 2
2002年3月11日,GTK2.0版正式釋出。GTK 2是GTK後繼版本,其新特性包括使用Pango改進的文字彩現、新主題引擎、使用ATK改進的可達性、完全轉換到使用UTF-8的Unicode和更靈活的API。但是它和GTK 1不完全相容,因此必須由程式設計師做移植工作。由於GTK 1更快、相對更簡單或更加適合嵌入式應用,所以還被繼續使用。
發展
Ridley專案正在嘗試統一一系列和GTK相關的庫,包括libgnome、libgnomeui、libgnomeprint、libgnomeprintui、libglade、libgnomecanvas、libegg、libeel和gtkglext。
GTK hello world
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 Runtime Environment for Windows
由於GTK主要是作為Unix-like系統底下的介面,在Windows使用該系統所開發的軟體時就需要用到GTK執行環境,即GTK Runtime Environment for Windows。這個軟體與GTK不同的地方在於它僅僅是為了執行軟體用途而製作,以解決Windows沒有內建GTK函式庫的問題。
參見
參考資料
外部連結
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads