GTK+ 基礎,第 1 部分: 爲什麼使用 GTK+?

 Maciej Katafiasz ([email protected]), 學生, Computer Science

本系列由三部分組成,向您介紹 GTK+ 世界。本文是第 1 部分,解釋什麼是 GTK+、爲什麼要考慮使用它,以及它提供了什麼優勢。本期文章與本系列其餘文章一起,提供了足夠的介紹性信息,這樣,當您決定在自己的項目中採用 GTK+ 時,就知道到哪裏去尋找進一步的材料。

GTK+ 是一種圖形用戶界面(GUI)工具包。也就是說,它是一個庫(或者,實際上是若干個密切相關的庫的集合),它支持創建基於 GUI 的應用程序。可以把 GTK+ 想像成一個工具包,從這個工具包中可以找到用來創建 GUI 的許多已經準備好的構造塊。

最初,GTK+ 是作爲另一個著名的開放源碼項目 —— GNU Image Manipulation Program (GIMP) —— 的副產品而創建的。在開發早期的 GIMP 版本時,Peter Mattis 和 Spencer Kimball 創建了 GTK(它代表 GIMP Toolkit),作爲 Motif 工具包的替代,後者在那個時候不是免費的。(當這個工具包獲得了面向對象特性和可擴展性之後,纔在名稱後面加上了一個加號。)

這差不多已經 10 年過去了。今天,在 GTK+ 的最新版本 —— 2.8 版上,仍然在進行許多活動,同時,GIMP 無疑仍然是使用 GTK+ 的最著名的程序之一,不過現在它已經不是惟一的使用 GTK+ 的程序了。已經爲 GTK+ 編寫了成百上千的應用程序,而且至少有兩個主要的桌面環境(Xfce 和 GNOME)用 GTK+ 爲用戶提供完整的工作環境。

爲什麼使用 GUI 工具包?

使用 GTK+ 這樣的庫比起編寫自己的 GUI 代碼來有多個優勢。例如,它可以顯著節約開發時間,讓開發人員把精力集中在項目真正重要和真正獨特的地方,而不必重複公共的功能。對於用戶來說,這意味着他們使用的應用程序之間具有更好的一致性:工具包能在哪使用,應用程序就能跟到哪裏。就像使用 LEGO 一樣,所有的人都使用同一兼容尺寸這一事實,意味着設計可以在使用庫的人之間共享,不論他們在哪裏使用它。

在現實中,現代的 GUI 工具包做的工作不僅僅是避免重複。它們提供了許多高級功能,用戶希望在他們的應用程序中擁有這些功能,但是用別的方法得不到這些功能,因爲在這類工具包上所投入的時間和工作,要遠遠超過在單一應用程序上的花費。所以,如果在應用程序中使用 GUI 對您來說很重要,那麼請使用工具包。除此之外別無他法。現在剩下的惟一問題就是,應當使用哪個工具包?





回頁首


GTK+ 的優勢

不論開發的需要是什麼,GTK+ 可能就是您正在尋找的答案。GTK+ 提供了許多東西:

  • 它既現代,而且得到了積極的開發與維護,圍繞它有一個充滿活力的社區。
  • 它提供了廣泛的選項,用於把工作擴展到儘可能多的人,其中包括一個針對國際化、本地化和可訪問性的完善的框架。
  • 它簡單易用,對開發人員和用戶來說都是這樣。
  • 它的設計良好、靈活而可擴展。
  • 它是自由軟件,有一個自由的開放源碼許可。
  • 它是可移植的,從用戶和開發人員的角度都是這樣。

現代的且開發積極的工具包

GTK+ 是採用軟件開發中的最新技術開發的,只要發現缺陷(肯定有缺陷,因爲沒有任何軟件是完美的),開發人員就會盡力在下一版本中修補缺陷。使用現代的軟件意味着,您不會陷在過時的工作中,而跟不上時代的發展。

持續的維護和開發也意味着您擁有影響工具包的未來發展方向的能力。另外,在出現新的發行版時,會引入基於用戶反饋的新特性和新功能,而舊的問題則得到修補。

國際化、本地化和可訪問性

在創建要讓所有人使用的軟件的時候,請記住三個關鍵字:國際化、本地化和可訪問性(通常分別縮寫爲 i18nl10na11y)。

國際化 是將程序準備爲被母語不是開發應用程序所採用的語言的人使用的過程,所以應用程序不依賴於對任何特定語言的任何假設。

i18n 遠遠不只是對程序使用的文本進行翻譯。它還意味着要考慮所使用的不同腳本和字母表、不同的編寫方向、顯示許多語言所需要的特殊處理以及爲用戶提供輸入文本的適當方法。不是每種語言都可以簡單地把每個字母映射到鍵盤上的不同鍵,而且還必須實現更好的複雜性,例如確保在錯誤消息中使用正確的複數。

本地化 與 i18n 密切相關,因爲爲國際用戶準備應用程序不僅僅是改變語言。程序還必須能夠理解並尊重日期、貨幣顯示、數字標註、文本排序所使用的不同習慣,以及許多可能不太注意的細節之處 —— 例如有些符號的使用,在世界的不同地方可能會被認爲是不恰當的或無禮的。

正像 i18n,正確的 l10n 要求在代碼中添加很多東西,而這些是事後很難輕鬆加入的。GTK+ 提供了針對 i18n 和 l10n 的恰當工具,會讓代碼(和二進制)可以在許多語言和地域上不加修改地運行。切換地域所需要的就是隨操作系統(針對 l10n)或者一個可獨立於實際的程序進行處理和發佈的翻譯文件(針對 i18n)一起發佈的一組數據。帶來的靈活性會得到開發人員、翻譯者和用戶的熱愛。

可訪問性 是讓每個人都可以使用您的程序。有些用戶的視力不佳,有些人可能不能用鍵盤或鼠標,而有些人可能只能移動他們的眼睛。要確保每個想使用您的應用程序的用戶都能使用,需要做許多工作。幸運的是,GTK+ 提供了一個途徑,可以通過一個完善的預先存在的 a11y 框架,立即得到這方面的支持,而您這邊幾乎什麼工作也不需要做。使用這個框架(它是 UNIX® 系統上的事實標準),可以把應用程序帶給各類用戶。

您也能享受 a11y 的許多優勢 —— 例如執行自動 GUI 測試的能力。通過讓特殊需求用戶運行的可訪問性軟件可以使用您的應用程序,您也可以讓測試軟件可以訪問它,例如,檢查行爲是否正確 —— 這在傳統的 GUI 編程中會帶來嚴重的問題。(還值得記住的是:現在,a11y 不再被當作 “好” 東西。許多法規 —— 例如有關美國政府用軟件的規則 —— 實際上要求軟件對特殊需求的用戶有恰當的支持。)

以上三點可能是使用工具包的充足理由 —— 特別是 GTK+,它在這三個領域都有優秀的支持。這個支持絕不完美,但在同類軟件中是最好的,而且把這些關鍵字整合進應用程序的重要性並沒有提到應有高度。在今天的世界中,計算機無處不在,用戶衆多而且獨特,所以不能認爲一個遺漏一整羣用戶的應用程序是一個完整的產品。

簡單易用

這一點應當很明顯,但是它實際上含義豐富。工具包對用戶應當容易,這樣纔有可能創建簡單的、直覺的和樂於使用的界面,哪怕針對的是新手。創建人機交互的正確模型不是一項簡單的任務,GTK+ 正是長時間工作的結果,而且是衆多的甚至困難的決策的結果。

GTK+ 對於開發人員也易於使用。它允許開發人員用簡單的方式說出自己想要的東西,不會用所謂正規方式給開發人員帶來負擔,這些正規方式是計算機爲了彌補它們固有的缺乏想像力的缺陷而施加給人類的負擔。

設計良好、靈活和可擴展

編寫 GTK+ 的方式允許在不扭曲基本設計的情況下,讓維護人員添加新功能、讓用戶利用新功能。工具包也是可擴展的,這意味着可以向其中添加自己的塊,並用使用內置塊一樣的方式使用它們。例如,可以編寫自己的控制元素,比如說用於顯示應用程序處理的科學數據,並讓它正確地遵照用戶選擇的顯示風格,就像 GTK+ 自身的控件那樣。

更進一步,GTK+ 是可定製的,這樣就可以讓它適應自己的需求。GTK+ 有一個系統,可以在所有應用程序之間複製設置,包括主題的選擇。主題 是一組一同發佈的定製設置,會影響 GTK+ 使用的基本控件看起來的效果,甚至某種程度上的行爲方式。使用主題,可以(例如)模擬另一個操作系統的觀感(參見圖 1)。


圖 1. GTK+ 應用程序的示例外觀

GTK+ 應用程序的示例外觀

帶有自由開放源碼許可的自由軟件

自由軟件 意味着每個人不僅可以自由地獲得和使用這個工具包,還可以在滿足某些條件的情況下修改並重新發布它。自由開放源碼許可 意味着這些條件不是嚴格限制的,可以得到的自由程度是顯著的。最重要的是,GTK+ 採用了 Lesser General Public License (LGPL) 許可,這是 GNU 許可家族中一個不太嚴格的許可。LGPL 允許自由地獲取、修改和發佈它覆蓋的任何軟件,只要對修改也保持自由即可。LGPL 還允許任何人使用該庫提供的功能,而不 要求用戶公開應用程序代碼。(這對於許多工業應用來說很重要,因爲由於以前的協議或許可,這種場合下一般不希望公開代碼或者公開代碼是顯然不現實的。)使用 LGPL 許可,您既可以是開放源碼社區的好夥伴也可以是好公民。

可移植

最後(但並不是最不重要),GTK+ 是可移植的。這意味着用戶可以在許多平臺和系統上運行它。另一方面,開發人員可以把軟件提供給衆多用戶,卻只要編寫一次程序,還可以使用許多不同的編程和開發平臺、工具和編程語言。所有這些都可以理解爲更多的潛在用戶,您可以利用更好地滿足需求的更廣泛的技能和工具。

所有這些優勢組合在一起,讓 GTK+ 成爲軟件開發的堅實基礎。有了它,就能夠把注意力集中在解決實際問題上,而不必重新發明輪子,而且您也可以確信創建的應用程序會按照用戶預期的方式運作、解決他們的問題,而不必創建新的應用程序。





回頁首


下期預報

本文提供了 GTK+ 的快速高層次概述,沒有深入太多細節。在下一期中,可以看到實際的 GTK+ 代碼的作用。我將介紹代碼的實際運作方式,介紹一些可用的工具,並演示 GTK+ 如何處理不同的平臺和語言。在最後一篇文章中,可以看到一些更精彩的 GTK+ 示例,我還將分析兼容性、移植性、部署以及讓 GTK+ 適合具體需求的問題。最後,您將發現足夠的指點,當您決定在自己的項目中使用 GTK+ 時,知道到哪去尋找幫助。



參考資料

學習
  • 您可以參閱本文在 developerWorks 全球站點上的 英文原文

  • 請訪問 GTK+ 獲得關於這個工具包的更多信息。

  • GTK+ API 參考頁面 對於所有開發人員都很重要。

  • Matthias Warkus 編寫的 The Official GNOME 2 Developer's Guide(No Starch Press,2004 年)介紹了 GNOME 2,包括使用 GTK+ 進行編程。

  • 請訪問 developerWorks 開放源碼專區 獲得豐富的 how-to 信息、工具和項目更新,幫助您用開放源碼技術進行開發並把它們用於 IBM 產品。


獲得產品和技術
  • 獲得官方的 GTK+ source code tarballs

  • 獲得第一個,而且仍然是最流行的 GTK+ 應用程序:GIMP

  • 請參閱 GNOME,這是使用 GTK+ 構建的側重於可用性的桌面。

  • 請嘗試 Xfce,這是一個快速而易用的桌面,也是用 GTK+ 開發的。

  • 請訪問 Gnomefiles 並得到超過 1,000 個用 GTK+ 構建的應用程序。

  • 請用 IBM 試用軟件 改造您的下一個開放源碼開發項目,可以下載也可以通過 DVD 得到。


討論


關於作者

Maciej Katafiasz 是計算機科學專業的研究生,從高中起就一直使用開放源碼技術。從 GNOME 1.0 起,他就是 GNOME 桌面的用戶,而 2.0 版一發布,他就愛上了它並瞭解到 GTK+ 能夠開發自己喜歡的桌面。

發佈了10 篇原創文章 · 獲贊 12 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章