July 21, 2008
「Gtk+ 程式設計初體驗」參考範例上線
即將於本月 26 日 (週六) 舉辦的 [
教育訓練:Gtk+ 程式設計初體驗],以專案目標導向的形式,探討 [
Gtk+] 與相關技術,其參考範例已預先上線,可參考 [
gtk-examples0.tar.bz2] (授權:public domain)。這幾個範例都是貨真價實的完整應用程式,不單跑個 "Hello World" 而已,主要是希望帶著與會者去熟悉 Gtk+ 方式的編寫程式慣例,期許能充分利用這些開放發展、可累積的技術。
在這個「Google 時代的 Programming」模式 (詳情可參閱 [
qing] 老大的文章) 之下,其實我們最該思考的關鍵點,就是如何「借力使力」,尋求透過成熟的自由軟體技術,達成我們所期望的應用或系統設計。以 Gtk+/GNOME 來說,隨便一個技術細節都可以談上好幾天,遑論徹底知曉整個 framework 設計或個別應用程式的特性,但隱約中,系統卻保持若干一貫的設計準則與發展模式,這就是我們該去探究與揣摩的,這也是本教育訓練一開始就丟出具體而微的範例的緣故。廢話不多說,咱們看看在「初體驗」課程中,裡頭的三個範例檔:
- [webapp.c] (使用 Gtk+/WebKit 的應用程式)

由圖可見,這是個左邊一個按鈕,右邊一個馬力歐遊戲的小程式,當然,遊戲本身是可以玩的,這需要幾行程式呢?
- [editor.c] (Gtk+ widget 展示)

如上圖,這就是一個文字編輯器,完全支援 Unicode 與多行編輯,觀察看看,用幾行程式碼達成? -
- [player.c] (使用 GStreamer 技術的範例)
這是個可播放多媒體聲音 / 影像的小程式,雖然沒有華麗的介面,但就跟 MPlayer 一樣,忠實地處理指定網址 (包含 file:// ) 的多媒體檔案,這又需要多少程式碼呢?
議程中,還會給定另一個範例,將上述項目一併整合起來,預期可透過 Gtk+/WebKit 繪製程式碼介面、Gtk+ widget 來作整體外觀布局,再用 [
GStreamer] 嵌入華麗的多媒體內容。過去,我們聽到這樣的需求,不免就會聯想到商業軟體豐富視覺呈現,但透過 Gtk+ 一系列的技術,只要掌握若干關鍵點,我們也得以做出相仿甚至更好的效果,這也是強調「作中學」的精神所在。
透過以上範例,Gtk+ 若干設計的核心想法也將被伴隨揭露於與會者之前,試看:
- 物件導向的思維與實做:表面上都是 C 語言的 Gtk+,其實蘊含豐富的 OOP 機制,而物件導向更是深植於設計本體
- 視窗系統中的事件與其對應的操作處理:藉由範例程式的修改與調整,我們可即時窺見這些抽象概念的視覺具體呈現
- 圖形元件的設計概念與組合、互動形式:無疑地,這是 Gtk+/GNOME 技術引人入勝之處,只要施點魔力,就會浮現於我們面前
- MVC (Model-View-Control) 設計模式的引入:Gtk+ 到處可見到 Design Patterns,並以優雅的形式去將若干技術融會其中
另外,感謝各位朋友的捧場,開放報名的後兩天,竟然就立刻額滿,實在是始料未及,所以,現在的補救方式有兩個,一是請您耐心等待議程錄影的上線,另一是充分利用當天會場的空間,造成困擾,請多見諒。
編譯與執行上述範例程式的基本需求,以 Debian/Ubuntu 為例:
- apt-get install build-essential
很顯然,我們需要編譯 C/C++ 應用程式
- apt-get install libgtk2.0-dev
主題是 Gtk+,當然要安裝其對應的開發套件
- apt-get install libwebkit-dev
依據 debian 描述,該套件為 "Web content engine library for Gtk+",注意,Qt 4.4 之後,也切割了 libqt4-webkit,表示 WebKit module for Qt,不要弄混淆了
- apt-get install gstreamer0.10-x gstreamer0.10-tools gstreamer0.10-ffmpeg gstreamer0.10-plugins-base gstreamer0.10-plugins-good gnome-media
這是運作與開發 GStreamer 應用程式所需的套件,預先被妥善地切割,所以稍微多了些,不礙事,反正當天會講解
即便是歐美,其實以 Gtk+ 為主軸的教育訓練也相當少,不若 Qt 背後有 Trolltech/Nokia 商業力量撐腰,這也讓小弟在構思這系列的教育訓練時,著實推敲頗久。希望能先試著在「初體驗」課程中,分享過去開發 Gtk+ 為基礎應用程式或系統設計的經驗,並收集與會者的意見,再將後續更完整的內容推出。當然,仍是保持免費、開放參加的形式來進行,期待您的指教,謝謝!
由 jserv 發表於 July 21, 2008 04:26 PM
非常、非常希望會後有提供完整的錄影,看到消息時想報名就以經額滿了...Orz
以后大大的讲座最好有人录像把,放到youtube上,搞个jserv tech talk.....让我们这些外地的也能一睹风采!
Ubuntu 8.04 上面的套件名稱是
libwebkitgtk-dev - Web content engine library for Gtk+ - Development files
另外就是 examples-0/editor/Makefile 中的 pkg-config
要改成 pkg-config --cflags --libs gtk+-2.0 才能編譯
另外 examples-0/media 的 player 編譯前要先裝上 libgstreamer0.10-dev
編譯完後的使用方法
./player file:///home/user/test.mp3
最後是 example-0/webapp/Makefile 裡面要改成 pkg-config --cflags --libs WebKitGtk gtk+-2.0
還有 webapp.c 裡面要改成 #include <WebKit/webkit.h> 才能夠編譯
以上資訊提供給在 Ubuntu 8.04 的使用者參考... :)
感謝 $4 !
我的環境是 intrepid (Ubuntu 8.10),結果套件命名與打包方式竟然不一致,實在沒注意到,實在納悶,Gtk+/WebKit 推出也頗有時日了。
GTK 一直都是我很喜歡的一個環境. 可惜已經有好多年沒機會接觸了.
它以單純的 C 語法表現出 C++ 的特性, 真的是十分吸引人. 突顯出了 "設計" 的重要. 網上常見許多朋友的文章在 "物件導向" 和 C++/Java 劃上等號, 反而落得下乘了. 尤其是在當時 gcc 中 C compiler 遠比 C++ compiler 來得優秀與穩定, 且懂得 C 的人也遠比 C++ 與 Java 多. 可惜 GTK+ 本身依然是一個 project, 不像 Qt 很早開始就商業化有經濟支柱在背後推動.
文中提供的三個範例都十分精簡, 相信對初學者而言相當容易上手. 不過 Mario 例子中遊戲畫面實在太吸引人, 恐怕造成像我這般誤認為重點是遊戲設計, 而有點希望落空.
n 年前有做一個簡單的採地雷, 有興趣的朋友可以看看. 希望在目前的 GTK+ 還能 compile. 裡面都是 Big-5.
http://debian.linux.org.tw/~kevpeng/
我按照方法編譯完成後,想要測試media player這隻程式
我在console輸入
./player file:///home/user/Sealedwithakiss.mp3
結果卻跑出
** Message: don't know how to handle audio/mpeg, mpegversion=(int)1, layer=(int)3
** Message: Error
請問要如何才能播放成功呢?
To 小蟹,
應該是欠缺 gstreamer 所需的 plugins,請嘗試安裝前文提及的套件,再行播放
jserv您好:
我用的是epc 701
系統是debian + LXDE (pcman釋出的那個版本)
apt-get install gstreamer0.10-x gstreamer0.10-tools gstreamer0.10-ffmpeg gstreamer0.10-plugins-base gstreamer0.10-plugins-good gnome-media
以及$4所說得libgstreamer0.10-dev
我已確認過都是最新版了
但還是一樣的錯誤
需要加入甚麼參數嗎?
想請問jserv大大:
當天上課看到您的vim,
可將GTK函式以不同顏色標示,
且可以追蹤function,
請問是怎麼設定的呢?
@aloha,
感謝提醒,已於新的文章補充: http://blog.linux.org.tw/~jserv/archives/002053.html