【GTK】GTK介紹

最近在用GTK寫一些工具,所以寫一個基礎教程系列,總結學習成果。

簡介

GTK是一款開源的、面向多平臺的GUI工具箱,其英文全稱爲GIMP Toolkit。最初是Peter Mattis 和 Spencer Kimball 爲GNU Image Manipulation Program (GIMP)編寫,用來替代付費的Motif。在後續的發展中,它已經成爲通用的GUI庫,應用於越來越多的程序,Linux平臺的圖形應用程序的半壁江山都是使用GTK編寫的。

GTK的英文全稱

GTK的英文全稱,讓我想到了GCC。GCC最初定位於GNU C Compiler,但隨着支持的編譯器越來越多,它的定義已經包不住編譯器的多樣性,所以現在改成了GNU Compiler Collection。這樣看來,是不是GTK的名字也得換換了,畢竟現有的名字很侷限。

GTK的語言綁定

GTK是使用C語言寫的,所以其原生API都是面向C的,同時GTK的一大特點是,在C語言層面實現了面向對象的特性。如果你是用C++語言作爲開發語言、調用GTK的C接口的話,使用會稍顯繁瑣,這是語言層面的差異,跟框架關係不大。正是爲了避免不同語言調用C的繁瑣,GTK提供了多語言的綁定,爲不同的語言提供同等抽象級別的語言調用,這樣C++程序員就可以直接調用C++的語言綁定,使用方式友好。

GTK的授權

GTK是完全免費的,而且基於LGPL協議,這可以保證私有軟件通過鏈接使用GTK可以不把軟件源代碼開放,對商業應用較友好,這跟GPL協議是不一樣的。也正是LGPL協議,使得早些年Gnome(基於GTK編寫)風頭勝過KDE(基於QT編寫)。

GTK的跨平臺

GTK是跨平臺的,支持Unix類的系統、Windows,甚至手機平臺。之前我專門有篇文章介紹了在Windows下的環境搭建,C語言的開發環境的搭建還是非常容易的。

GTK vs GTK+

關於名字。從網上的資料上,你可以看到GTK+的字眼,這個加號官方是有描述的:

The "plus" was added to "GTK" once it was moved out of the GIMP sources tree and the project gained utilities like GLib and the GTK type system, in order to distinguish it from the previous, in-tree version.

大意是:GTK從GIMP獨立出來之後,加入了一些GLib和GTK類型系統的支持,爲了和GIMP代碼樹中的版本區分,所以帶上加號,這一區分就是好多年,給廣大的人民羣衆帶來了不小的認知麻煩。在今年,官方終於決定把加號去掉,以後直接叫GTK。

GTK的發佈版本

關於版本。現在開源的大環境是採用刷版本的方式,像火狐瀏覽器,谷歌瀏覽器版本蹭蹭的漲。之前GTK一直採用小步慢跑的版本方式,估計也快要刷版本了,下面引用一篇舊聞:

GNOME開發者在多倫多舉辦的GTK會議上討論了新的Gtk發佈方案,針對Gtk 3.x系列中的問題,開發者提議加快大版本的發佈速度:每兩年發佈一個大版本如 Gtk 4、Gtk 5和Gtk 6,每6個月發佈一個與舊版本不兼容的小版本,如Gtk 4.2、Gtk 4.4和Gtk 4.6。這項計劃意味着Gtk 4.0不是我們將稱之爲Gtk 4的最終穩定API。新的大版本能與舊的版本並行安裝,如Gtk 4 和Gtk 3能安裝在一個系統中,但不兼容的小版本不能,它們使用了相同的pkg-config名字和頭文件目錄。每一個連續小版本的API將逐漸成熟穩定,也就是說Gtk 4.6發佈時API將最終穩定下來,Gtk 4.6可以稱之爲 Gtk 4了。使用Gtk的開發者可以選擇跟隨穩定的版本。

爲什麼選擇GTK

  • 免費

    這條最實在。大的組織,比如公司,也是很注重成本的;小的個人,財務的承受能力也是有限的,這是GTK的誕生的原因。而且,很多軟件授權真的不便宜。

  • 語言綁定多

    這是GTK的重大優勢之一。GTK支持gobject-introspection,大大簡化了語言綁定的編寫。GTK的Haskell綁定haskell-gi,也得益於這一條。其他語言框架,比如QT,雖然很優秀,但提供的語言綁定實在是太少了,或者是語言綁定支持的完成度不高,與GTK差距不小。之前我推薦過兩款國產GUI框架:duilib和nana,即使非常喜歡,但因爲沒有Haskell的綁定,只能作罷。

    以下是官方列出的不完全列表:

圖片描述

  • 穩定性好

    這點也需要特殊說明一下。在05年接觸Linux那會,以及隨後的幾年,Gnome桌面環境在穩定性方面完勝KDE,KDE桌面崩潰就是家常便飯,當然這不一定就是由GTK和QT的穩定性造成的,但的確給我的選擇帶來了影響。所以這些年一直在用Gnome桌面。

    拋去上面不論,GTK的穩定性也是極好的。

  • 開放源代碼

    GTK的授權要求把相關更改的代碼開放,這使得改動可以爲大家享用,這也是開放源碼帶來的好處。開放源碼的項目,個人同樣可以參與,這樣可以提高自己的水平,爲社區做點貢獻。

  • 跨平臺

    現在很多GUI框架都是跨平臺的,這沒有什麼顯擺的。但當你有特殊需求時,才知道跨平臺是多麼重要。

請繼續關注我的公衆號文章
圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章