[ 永遠的UNIX::UNIX技術資料的寶庫 ]   GB | BIG5

首頁 > 編程技術 > 其它 > 正文
X-Window 編程 API
http://www.fanqiang.com (2001-06-08 11:00:01)

2000/03/04 By maa 


--------------------------------------------------------------------------------

Introduction

隨著 KDE、GNOME 的流行,來多人開始習慣一啟動 GNU/Linux,就在這種圖形化使用者介面環境下作業。在慢慢熟悉窗外的世界後,你可曾想過,自己也嘗試來寫個 X Window 的應用程式?在這篇文章中,我們將帶你一探 X programming 的路途,並讓你看看在 X 世界中,各種多彩多姿的圖形介面函式庫。

首先,我得先讓你知道很重要的一點:和 Microsoft Windows 這種每個窗子都長得一模一樣的制式化系統不同,在 X Window 的世界中,有超過你想像中多的 APIs (Application Programming Interfaces) 和圖形介面函式庫;搭配不同的函式庫,就會讓你的應用程式呈現不一樣的風貌。如果你有仔細注意 KDE 和 GNOME 的軟體,應該不難看出他們之間有甚麼差異。

The Layered X Programming APIs

「一張圖勝過千言萬語」,我想咱們就直接從底下這張「The Layered X Programming APIs」一圖開始吧。(:這張圖是我參考一些文件畫的,可能不是很正確,如果前輩覺得有不妥的地方,請來信告知!^_^ )

The Layered X Programming APIs



可別被這張圖給嚇到,我只是想讓你知道「要寫一個 X Window 的應用程式,其實有好多條路可以走 」。 

這張圖是這樣的,上頭的「X Applications」也就是我們的應用程式,可以使用各種 APIs 和圖形介面函式庫 (圖中的方塊),透過 X Protocol (Network Connection) 來和 X Server 連線溝通。 Appilication 可以用 Motif,或是 KDE、Qt、Gnome、GTK、PerlTK…甚或最底層的 XLib 等任何一種「函式庫」來寫。而方塊疊在方塊之上的或是被箭頭指著的,代表著上層的方塊是「基於」下層的方塊衍生而來,比如 Motif 以 Xt 為基礎,或是 KDE 以 Qt 為基礎以及 GNOME 是以 GTK 為基礎衍生而來。

了解這張圖怎麼看後,底下就開始解釋這張圖各元素所代表的意義:

The X Library (Xlib)

The  X Library 是 X Window 程式最低階的程式設計介面,如果拿來和 Windows 比較起來,Xlib 就和 Windows APIs (或稱 Windows SDK) 一樣,算是最接近 X Server 的程設介面,它只提供最基本的繒圖和訊息事件的處理。

由於 Xlib 只能使用 C/C++ 語言來寫,程式的撰寫比較低階雜。因此後來就有將 Xlib 包裝簡化 (抽象一些) 的函式庫出現,讓 X Application 的撰寫變得比較容易。 

X GUI Toolkits

X Toolkit Intrinsics (Xt)

Xt 是第一個把 Xlib 包裝成更抽象化的函式庫,它提供了「物件導向」的程式設計架構,並且引進了一種稱為「widget」的概念,這種「widget」資料結構也就是所謂的「User Interface Componets」像是 menus、buttons 或是 TextBox 等 widgets。從此以後程式設計師就可以用 widget 的觀念,來架構我們的應用程式,讓程式變得簡單且容易了解。 
不過 Xt 只定義了應用程式要如何和這些 widgets 溝通,並沒有規定這些 widgets 的外觀要長甚麼模樣。這些 widgets 真正的樣子最後還是得靠更高層的函式庫來處理。 (通常提供 widgets 的函式庫,我們就稱之為 X ToolKits)。 

接下要繼續講的 Motif、OpenLook 和 Lesstif 等便都是從 Xt Library 衍生而來的圖形介面函式庫。為了方便起見,我們將這些圖形介面函式庫以 GUI Toolkit 來代替之 (也可叫 X Toolkit)。(還有一個 Athena Toolkit 也是衍生自 Xt Library,只是我實在找不到它的資料,而且也聽說 Athena Toolkit 的 Widget Set 不太好看,所以就省略了!)

其實 Microsoft Windows 也是有自己一套 GUI Toolkit,只不過沒人知道這套 GUI Toolkit 的名字,而且它已經是制式化的了,所以就不是那麼重要了。

Motif 

Motif 為目前最主要的 GUI Toolkit,它便是以 Xt 的 widget 概念為基礎,提供外觀和 Microsoft Windows 95 極為類似的圖形介面。Motif 是由 Open Group (以前叫 Open Software Foundation) 所出產。

不過現在的 Motif 已經不只是單純的 GUI Toolkit 了,它也包含了一個 Motif window manager 用來管理 X Clients (X Applications)。

底下的表格列出目前可供輔助 Motif GUI Toolkit 做 X Applications 圖形介面設計的工具 (我會盡量將該工具的特徵也一列在括弧中):

Supported GUI Builders
 
BX Pro
http://linux.ics.com/ 
 

LessTif 

Lesstif 是模仿 Motif 的 toolkit, 它是個自由軟體,您可以在網路中自由/免費地取得它。它發展的動機是因為要使用 Motif 必須付費或取得授權,然而目前仍有許多 X-Window 軟體是基於 Motif 寫成的,故才由一群有志之士發展了這一套 Motif 的替代品。LessTif 還在持續開發之中,至 1999 年底,LessTif 原始碼相容於 Motif1.2 版的規格,而 Motif 現在則是 2.1.20 版。

OpenLook 

另一個 Xt-based 的 GUI Toolkit,由 Sun Microsystems 和 AT&T 所發展。由於 OpenLook 和 Motif 的相繼出現,Unix 系統曾經有好一段時間,一直處在介面標準的爭戰之中,原因就是因為 OpenLook 和 Motif 分別提供完全不一樣的介面風格。後來終於在 Sun Microsystem 決定採用了 Motif 當標準 GUI 介面,才結束了這場戰爭。

Xforms 

Xforms 亦是建立在 Xlib 基礎上的一套 X Window System GUI toolkit。

TCl/TK 

TCL (成 "tickle") 為 Tool Command Language 的縮寫,TCL 是一個文字處理用的語言。TK (含成 "tee-kay") 則是用來延伸 TCL,讓 TCL 有能力處理圖形使用者介面的 GUI Toolkit。

Supported GUI Builders
 
SpecTCL
http://www.scriptics.com/products/spectcl/ 
 

Perl/Tk (ptk) 

顧名思義,可以知道它是用 Perl 這套程式語言所實作出來的  Tk GUI Toolkit。以 Perl 的語法簡潔特性和驚人的發展速度來看,使用 Perl/Tk 的人應該不比用 TCL/Tk 來得少。

Supported GUI Builders
 
SpecPerl
http://www.keck.ucsf.edu/~kvale/specperl.html 
 

QtTM 

QtTM (發音和 "cute" 相同) 也是一套 GUI Toolki ,比較特別的是它是用 C++ 語言寫成,並且目前 GNU/Linux KDE 就是以 Qt 當基本的 GUI Library 繼續衍生。同時 Qt 也是一套跨平台的函式庫,用 Qt 寫成的軟體,可以很輕鬆地移殖到 X Window 或 Microsoft Windows 平台。只不過,要特別注意 License 的問題,Qt 在 Linux 是可免費使用,但在 Windows 平台可就有點不同。 

(現在也有 PerlQt 這個模組,讓習慣用 Perl 語言的人來寫 Qt 的程式!你可以在 Perl CPAN 中找到 PerlQt!)

Supported GUI Builders
 
QtEZ (Project Manager、Source Editor、Menu Editor、Signal/Slot Editor、Attribute Editor)
http://www.ibl.sk/qtez/ 
EBuilder (Design Editor、Signal/Slot Editor)
http://www.phys.uu.nl/~meer/Ebuilder/ 
Qt Architect (Dialog Editor)
http://www.qtarch.intranova.net/ 
 

KDE 

KDE Project 是建立在 Qt 之上的函式庫。除此之外,KDE 的目標是要在 GNU/Linux 系統上建立一個和 Common Desktop Environment 一樣的整合圖形介面使用環境;所以 KDE 還包含了 Window Manager 、Desktop Manager,同時還附有一堆 KDE 的軟體。 

Supported GUI Builders
 
QtEZ (Project Manager、Source Editor、Menu Editor、Signal/Slot Editor、Attribute Editor)
http://www.ibl.sk/qtez/ 
Kdevelop (Project Manager、Source Editor、Dialog Editor、Class Viewer、Application Wizard、Class Generator、Documentation Browser)
Kdevelop 整個環境的操作感覺和 Microsoft Visual C++ 非常類似。
http://www.kdevelop.org/ 
KDE studio (Project Manager、Source Editor、Dialog Editor、FormBuilder)
http://www.softarc.com/~msharkey/kdestudio 
 

GTK 

GTK+ (GIMP Tool Kit) 也是一套 GUI ToolKit (以 C 語言為程設介面),可用來建立 X Window System 以圖形為基礎 (GUI-based) 的應用程式。一開始 GTK+ 是寫來給 GIMP (GNU Image Manipulation Program) 圖形處理軟體使用的。現在普遍使用於 GNOME 和各種軟體。

目前 GTK+ 有非常多種語言支援,如 C++ 的 Gtk--、Perl-GTK+、Python-GTK+ 等等 (可至 GTK+ 網站中找到其它語言的資訊),而且也有不少的設計工具可以輔助開發以 GTK+ 為介面的程式。

Supported GUI Builders
 
Glade (Project Manager、Palette Window、Property Window)
Glade 預設會產生 C 原始碼,可搭配其它支援 XML 的工具來產生不同語言的程式碼。
http://glade.pn.org/ 
GRAD (Project Manager、Source Editor、Visual Editor、Debuger) 
類似 Delphi 、 Borland C++ Builder 的 RAD Tool。
http://grad.penguin.cz/ 
VDKBuilder (Project Manager、Source Editor、GUI Editor、Widget Inspector)
http://www.programmers.net/artic/Motta/vdkbuilder/index.htm 
Perl Composer (Project manager、Code Editor、Property Editor、Form Viewer、Palette)
這 wycc (王佑中先生) 前輩力推的 Perl/GTK GUI Builder,目標是建立一 Visual Basic like 的開發環境) 
http://linux.ece.uci.edu/~wangy/VisualPerl/vperl.html 
 

GNOME 

GNOME (GNU Network Object Model Environment) 為以 GTK 為基礎的圖形介面函式庫.。和 KDE 一樣,GNOME 也是以建立一個完整、友善的圖形使用環境為目標,並提供 GNOME 相關的軟體。

Supported GUI Builders
 
Glade (Project Manager、Palette Window、Property Window)
Glade 預設會產生 C 原始碼,可搭配其它支援 XML 的工具來產生不同語言的程式碼。
http://glade.pn.org/ 
 

Java AWT 、JFC 

Java AWT toolkit (Abstract Window Toolkit) 與 Java Foundation Class (JFC) components 為 Java 的圖形介面類別庫,可以讓程式設計師撰寫 GUI 程式,只要有支援 Java 的作業平台就可執行。

Supported GUI Builders
 
JBuilder Foundation
http://www.inprise.com/jbuilder/foundation/ 
 

結語

如果你是第一次接觸 X Programming,也許也會和我一樣讓這麼多的 GUI Library 弄得眼花燎亂;不過至少在看完本文之後,你應該已經有了一些重要的觀念:第一就是你可以選擇純手工,用 Xlib 這個最低階的 C 程設介面來寫 X 程式;或是從琳瓏滿目的「GUI Toolkit」,選其中一套來寫 X 程式 (這邊最主要就是你得以 Widget 的概念來寫 X 程式!)。

至於到底該選擇哪一套函式庫比較好,並沒有一定的說法,必須看自己的需求而定,比如較拿手的程式語言、讓你覺得較舒服的圖形介面,或者是有不可抗拒的理由,比如現在 GNU/Linux 以 KDE 和 GNOME 為主流,所以用 Qt+KDE 或是 GTK+ GNOME 來開發程式,應該是不錯的選擇!

另外,現在用來輔助這些 GUI Libraries 來設計程式的工具也來多:比如有 C/C++ IDE 整合環境 Kdevelop、VDK (Visual Development Kit)、gIDE 或是給 Java 用的 JBuilder、Perl 用的 Perl Composer 或 Perl Builder、Python 用的 Python Builder,還有給 GTK+ 和 GNOME 用的介面程式產生器 Glade 等等。

只要我們先對這些 GUI Toolkits 先做過通盤的了解,並針對一兩套 GUI Toolkits 打好札實的基礎 (不用工具幫我們寫程式),到時後再配上這些方便的工具,想要在 X Window System 上寫寫簡單的程式應該就不是難事了。

PS: 我也只是收集比較常聽到的 GUI Toolkits 資料,在 X 世界還有好多 GUI Toolkits 都沒列出來,這部份就請看 References 中的網站資源了。

References 

參考文件: 
Kenton Lee: X Programming Model
http://www.rahul.net/kenton/txa/jun95.html 
Virtual Domicile of Steven K. Baum (各種 GUI Library 資料整理)。
http://stommel.tamu.edu/~baum/ocean_graphics.html 
Jeff Pitchers- X Window Guide
http://formast.lut.ac.uk/ASlab/info/usage/X-doc/XwindowGuide/doc.html 
Glade 入門介紹
http://mmlab.im.fju.edu.tw/~maa/xwindow/2000/2000010201.htm 
 
其它工具和相關網站: 
 
Kenton Lee X Window System Consulting (非常非常非常豐富的 X 資訊網)
http://www.rahul.net/kenton/index.shtml 
謝東翰個人網站 (CLE Developer、Xcin Maintainer),有許多值得收藏的 GNU/Linux 與 X Programming 相關文章與個人作品。
http://twcpro.phys.ntu.edu.tw/~thhsieh/ 
Freshmeat (Linux 每日新進軟體整理,更新速度快)
http://freshmeat.net/ 
LinuxApps (非常完整的軟體訊息中心,對軟體的介紹特別詳實)
http://www.linuxapps.com/ 
Perl CPAN (Comprehensive Perl Archive Network)
http://www.perl.com/CPAN 
Perl Builder
http://www.solutionsoft.com/perl.htm 
Python Builder
http://www.pcpros.net/~vbman/ 
(http://www.fanqiang.com)
    進入【UNIX論壇

相關文章
 

★  樊強制作 歡迎分享  ★