GTK

用來製作圖形化使用者介面的跨平台部件工具箱

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

GTK
gtk3-widget-factory是展示GTK +版本3中許多GUI小控件示例的集合
gtk3-widget-factory是展示GTK +版本3中許多GUI小控件示例的集合
原作者Spencer Kimball英語Spencer Kimball (computer programmer)Peter Mattis英語Peter MattiseXperimental Computing Facility英語eXperimental Computing Facility
開發者GNOME計劃
首次發布1998年4月14日,​26年前​(1998-04-14
當前版本
  • 4.16.4(2024年11月1日;穩定版本)[1]
編輯維基數據鏈接
源代碼庫 編輯維基數據鏈接
編程語言C語言[2]
操作系統Linux類Unix系統macOSMicrosoft Windows
類型部件工具箱
許可協議GNU寬通用公共許可證2.1
網站gtk.org

軟件架構

 
GTK工具包
 
GTK的簡化軟件架構。Pango, GDK, ATK, GIO, CairoGLib
 
GDK包含了對X11, Wayland, Broadway (HTTP), Quartz, 和 GDI的後端,並依賴於Cairo進行渲染。它的新SceneGraph還在開發中。

GTK 包含了一組圖形控制元素(部件);版本3.22.16包含了186個活躍的和36個廢棄的部件。[4] GTK是用C語言編寫的一個面向對象部件工具;它使用GObject,即GLib對象系統,來實現面向對象。雖然GTK主要是為基於X11Wayland的窗口系統設計的,但它也可以在其他平台上運行,包括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將從項目名稱中去掉「+」號。

GTK繪圖工具包(GDK)

GDK是對底層窗口系統和圖形系統提供的低級函數的封裝。

GTK場景圖工具包(GSK)

GSK是GTK的渲染和場景圖API。GSK位於圖形控制元素(部件)和渲染之間。GSK最終在2017年3月發布的GTK版本3.90中合併。

GtkInspector

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

GUI設計器

有幾個GUI設計器可用於GTK。以下項目截至2011年7月仍在活躍:

GtkBuilder

GtkBuilder允許在不編寫代碼的情況下設計用戶界面。界面在XML文件中描述,然後在運行時加載並自動創建對象。Glade界面設計器允許以「所見即所得」(WYSIWYG)的方式創建用戶界面。用戶界面的描述與使用的編程語言無關。

編程語言

GTK使用C語言開發,但是其設計者使用面向對象技術。也提供了ValaC++gtkmm)、PerlRubyJavaPython(PyGObject)綁定,其他的綁定有AdaDHaskellPHP和所有的.NET編程語言。

與其他很多部件工具箱不同,GTK並不基於Xt。這一決策優劣互見:優點是GTK可以應用於其他系統,其靈活性也很強;而缺點就是它無法利用以傳統方法為X11定製的X資源數據庫。GTK最早應用於X Window System,如今已移植至其他平台,諸如Microsoft WindowsDirectFB,以及Mac OS X平台上的Quartz.

Glade是一個界面設計工具,但是它也包含了一種描述GUI界面的XML語言,它和libglade一起工作就可以直接使用GTK和GNOME控件;新的Glade-3不再直接支持生成編程語言源代碼

外觀和視覺

提供不同的顯示引擎使得最終用戶可以定製外觀和視覺。目前已經有一些可以模仿其他流行的平台或者工具箱(例如Windows 95MotifQt或者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運行,另外還有DirectFBncurses

使用GTK的窗口管理器

GTK應用程序

以下程序都是使用GTK開發、屬於開源軟件,可以運行於Linux/UnixWindowsmacOS等多種操作系統平台上。

  • Firefox-Mozilla基金會的網頁瀏覽器,在Linux下使用GTK。
  • Geany-代碼編輯器
  • GIMP-類似於Photoshop的圖像處理程序
  • Inkscape-類似於IllustratorCorelDraw的矢量圖形繪製工具
  • Pidgin-支持多種協議(IRC、Gtalk、Yahoo Talk、MSN等等)的聊天工具
  • gcin-一種在Linux、Windows系統上常見的輸入法平台

版本歷史

主要版本 發佈日期 主要增強 最後次要版本
1.0頁面存檔備份,存於網際網路檔案館 1998年4月14日 第一個穩定版本 1.0.6
1.2頁面存檔備份,存於網際網路檔案館 1999年2月27日 新增部件(GtkFontSelectorGtkPackerGtkItemFactoryGtkCTreeGtkInvisibleGtkCalendar、GtkLayoutGtkPlugGtkSocket 1.2.10頁面存檔備份,存於網際網路檔案館
2.0頁面存檔備份,存於網際網路檔案館 2002年3月11日 GObject, UnicodeUTF-8)支援 2.0.9
2.2頁面存檔備份,存於網際網路檔案館 2002年12月22日 Multihead support 2.2.4
2.4頁面存檔備份,存於網際網路檔案館 2004年3月16日 新增部件(GtkFileChooser、GtkComboBox、GtkComboBoxEntry、GtkExpander、GtkFontButton、GtkColorButton) 2.4.14頁面存檔備份,存於網際網路檔案館
2.6頁面存檔備份,存於網際網路檔案館 2004年12月16日 New widgets(GtkIconView, GtkAboutDialog, GtkCellView).
最後一個支援Windows 98/Me的版本
2.6.10頁面存檔備份,存於網際網路檔案館
2.8頁面存檔備份,存於網際網路檔案館 2005年8月13日 Cairo integration 2.8.20頁面存檔備份,存於網際網路檔案館
2.10頁面存檔備份,存於網際網路檔案館 2006年7月3日 新增部件(GtkStatusIcon、GtkAssistant、GtkLinkButton、GtkRecentChooser)以及列印支援(GtkPrintOperation) 2.10.14頁面存檔備份,存於網際網路檔案館
2.12頁面存檔備份,存於網際網路檔案館 2007年9月14日 GtkBuilder 2.12.12頁面存檔備份,存於網際網路檔案館
2.14頁面存檔備份,存於網際網路檔案館 2008年9月4日 Jpeg2000 load support 2.14.7頁面存檔備份,存於網際網路檔案館
2.16頁面存檔備份,存於網際網路檔案館 2009年3月13日 New GtkOrientable, Caps Lock warning in password Entry.
Improvement on GtkScale, GtkStatusIcon, GtkFileChooser.
2.16.6頁面存檔備份,存於網際網路檔案館
2.18頁面存檔備份,存於網際網路檔案館 2009年9月23日 New GtkInfoBar. Improvement on file chooser, printing.
GDK has been rewritten to use 'client-side windows'
2.18.9頁面存檔備份,存於網際網路檔案館
2.20頁面存檔備份,存於網際網路檔案館 2010年3月23日 New GtkSpinner and GtkToolPalette, GtkOffscreenWindow. Improvement on file chooser,
keyboard handling, GDK.Introspection data is now included in GTK
2.20.1頁面存檔備份,存於網際網路檔案館
2.22頁面存檔備份,存於網際網路檔案館 2010年9月23日 gdk-pixbuf moved to separate module, most GDK drawing are based on Cairo,
many internal data are now private and can be sealed in preparation to GTK3
2.22.1頁面存檔備份,存於網際網路檔案館
2.24頁面存檔備份,存於網際網路檔案館 2011年1月30日 New simple combo box widget (GtkComboBoxText) added, the cups print backend can send print jobs as PDF,
GtkBuilder has gained support for text tags and menu toolbuttons and many introspection annotation fixes were added
2.24.0頁面存檔備份,存於網際網路檔案館
3.0頁面存檔備份,存於網際網路檔案館 2011年2月10日 Cairo, more X11 agnostic, XInput2, CSS-based theme API 3.0.0頁面存檔備份,存於網際網路檔案館

圖形無關代碼

最初GTK包括一些和圖形無關的常規功能,如鍊表二叉樹數據結構。這些基本功能和對象系統GObject已經合併到獨立的Glib,它被程序員專門用於開發不需要圖形界面的代碼。

GTK 2

2002年3月11日,GTK2.0版正式發布。GTK 2是GTK後繼版本,其新特性包括使用Pango改進的文本渲染、新主題引擎、使用ATK改進的可達性、完全轉換到使用UTF-8Unicode和更靈活的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 <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函式庫的問題。

參見

參考資料

  1. ^ 4.16.4. 2024年11月1日 [2024年11月2日]. 
  2. ^ The GTK Open Source Project on Ohloh. Ohloh.net. [2014-02-17]. (原始內容存檔於2013-12-08). 
  3. ^ Project rename to "GTK". mail.gnome.org. [2019-02-10]. (原始內容存檔於2020-11-07). 
  4. ^ GTK+ 3 Reference Manual. [2017-07-15]. (原始內容存檔於2021-06-23). 
  5. ^ Using GTK+ with Broadway. GNOME Developer. GNOME. [6 March 2018]. (原始內容存檔於2021-06-14). 
  6. ^ Broadway - GitHub symbiose/symbiose Wiki. GitHub. [6 March 2018]. (原始內容存檔於2023-06-28). 
  7. ^ GTK+ to Use Cairo Vector Engine. [2009-12-27]. 
  8. ^ 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. 
  9. ^ Matthias Clasen DevConf.cz 2018 talk about GTK+ 4 (PDF). 2018-01-26 [2023-06-28]. (原始內容存檔於2012-08-28). 
  10. ^ Introducing GtkInspector. 2014-05-15 [2023-06-28]. (原始內容存檔於2014-05-17). 
  11. ^ Another GtkInspector update. 2014-07-11 [2023-06-28]. (原始內容存檔於2014-07-14). 
  12. ^ Debian – Package Search Results – gazpacho. packages.debian.org. [2023-06-28]. (原始內容存檔於2023-06-28). 
  13. ^ Nothing-personal - A development site for Crow Designer, GuiLoader and Rally - Google Project Hosting. [2014-02-17]. (原始內容存檔於2013-01-24). 
  14. ^ Marco, MATE Desktop, 2022-12-21 [2023-01-19], (原始內容存檔於2022-12-05) 
  15. ^ Mutter, Linux Mint, 2022-12-15 [2023-01-19], (原始內容存檔於2023-01-04) 
  16. ^ Gala, elementary, 2023-01-15 [2023-01-19], (原始內容存檔於2019-02-26) 

外部連結