[心得] GUI
http://blog.godfat.idv.tw/2007/07/ruby-gui.html
Ruby GUI
關於 computer science 這個領域,除了程式語言(programming language)與
物件導向(object-oriented)外,再下一個興趣大概就是使用者圖形介面了吧(GUI).
所以我一直想找個自己喜歡的 toolkit 來用,在 C++ 中無非就是 Qt4 了,
不過在 Ruby 中,似乎沒有一個比較完美的 solution, 一個個來看。
在這之前,我先說明一下我用過的 C/C++/Java GUI toolkit.
1. MFC, 學校在教如何剪貼 MFC code, 我是叛逆份子,所以一個字都沒聽進去。
不用別人說很糟,光看第一眼就覺得很糟,更何況他又是被罵得半死的東西。
2. wxWidgets, 這算是我第一個使用的 GUI toolkit, 基本上,我認為這真的
是個很強大的東西,沒話說。不過最令人嘖嘖稱奇的應該是他跨平台的能力,如果我
沒記錯的話,他跨的平台好像比 Java 還多!不過因為風格問題,我不是很喜歡。
基本上,我認為 wxWidgets 的風格有些過於老舊,寫起來感覺不是很好。
Ruby binding 叫 wxRuby.
3. Qt, 我想正是因為 wxWidgets 跟我不太合,所以才繼續找下去。不料找到 Qt4,
我認為這應該是接近完美的 solution 了。有人說,Qt 至少領先其他人十年,也許
這麼講並不為過。最令人詬病的,大概就是你只能從 GPL 或超昂貴的商業 solution
兩種 license 中選一種。其實我不覺得這對我來說會是很大的困擾,open source
沒什麼不好,雖然 GPL 是有點太激進了些。Ruby binding 叫 QtRuby.
4. GTK+, 這個其實我不只沒用過,甚至連看都沒看過。理由很簡單,就是我不想用
C 想用 C++. 當然我知道 GTK+ 評價不錯,也有 Glade 和 win32 的 port,
只是似乎沒有足夠的推力讓我去嘗嘗看。
5. Swing, 會碰這個完全只是因為需要用 Java. 我個人是覺得他跟 wxWidgets
各有千秋,但同樣遠遜於 Qt. 不過也許這樣比較並不太公平,Java 天生就是沒 C++ 強。
所以 Qt 遠勝可能是理所當然的?Ruby 要用可以使用 JRuby.
6. Ultimate++, 其實這個我沒用過,不過看起來是不錯。沒去試主要有三個原因,
一,他綁 IDE, 這個我很不爽。二,他的命名法我不能接受。三,Qt 很好。XD
其實你去看他的網站,他有一個範例程式,並用各種 toolkit 來實做。我個人認為
這個動作滿不誠懇的,他有故意挑其他人弱點的嫌疑。而且各 toolkit 做到的東西
明顯有差異,這樣比並不公平。不誠懇,不喜歡。
7. Notus/VCF, 這兩樣 toolkit 都有一個很大的特色,就是 template
template and template... 基本上用 C++ 當然是要用 template 啊!!
不過知道這兩樣東西時我已經有一段時間沒碰 GUI 了,所以並沒有仔細調查這兩個
toolkit 感覺如何。但我想如果沒辦法接受 Qt 的話,這兩套 toolkit 值得一看。
8. .NET/mono, 這個其實我只用過 Visual C++ 2005 Express 稍微拉了一下
介面,感覺還不錯,但直接寫起程式不知道是什麼感覺。Ruby 要用的話,或許可以試試
IronRuby, 不過我個人對 .NET 沒什麼好感,就不去試了。
9. VCL, Borland 的招牌,我用過 Turbo C++ Explorer, 感覺是﹍基本上
我覺得沒有 .NET 好的感覺。而且要跨平台恐怕有點難,所以就不考慮了。更何況
這些好像也不算 open source 的吧?
10. FOX, 這個是我最沒聽過的 toolkit, 是去找 Ruby GUI 時才發現他的存在,
所以我一點都不知道他的狀況究竟如何。評價似乎是不錯,而且好像很年輕。只是呢﹍
FXRuby 似乎沒有 mac 的 port, 而我也已經有點懶得用 C++ 寫 GUI 了,
所以還是暫時跳過吧﹍。基本上沒有跨 win32/x11/aqua 三大系統的 toolkit,
我就沒什麼興趣試了。
本來只想隨意講一點的,不知不覺就扯多了。接下來看 Ruby 能使用的東西:
1. tk, 沒記錯的話,這個被 ruby 內建起來了。不過似乎是用過的都說爛,
所以還是不要多考慮吧?
2. FXRuby, FOX 的 ruby binding, 評價相當不錯,唯一的缺點也許是
還沒有 mac 版的樣子?我想未來應該值得繼續關切,雖然我還沒看過他程式
寫起來像什麼樣子。要試用的話,除了需要安裝 FOX, FXRuby 就:
gem install fxruby
3. wxRuby, wxWidgets 的 ruby binding, 我是看到有人批評寫起來像在寫
C++, 這應該算是一個滿大的缺點,不過看在他功能強大,跨平台能力驚人的份上,
還是值得試試看吧。要試用的話,除了需要安裝 wxWidgets, wxRuby 就:
gem install wxruby
4. QtRuby, Qt3 與 Qt4 的 ruby binding, 基本上評價仍然是相當地好,
唯一的兩大缺點,第一個是沒有 gem, 不能 gem install qtruby, 第二個是
在 windows 上要安裝似乎非常困難,沒有簡單的方法。但我相信假以時日,這兩個
問題都能夠解決(嗚嗚)。
5. Swing, 要灌 JRuby, 我的 macports 似乎找不到 jruby, 我又不想從
sun 的網站抓下來灌,再說,我也沒喜歡過 swing 過,所以就懶得試了。
6. Mono, 我有灌 mono, 不過不是很清楚能不能用 IronRuby 之類的東西存取,
之所以寫在這,算是做個筆記,說不定可以使用這樣。
7. GTK+, 我不是很確定有沒有 ruby binding, 但我想應該會有才是。不試的理由
同上,所以也只是暫時筆記。
Ruby 的 GUI 比較有名的大概就這幾個了吧。其實我是一直想試 QtRuby 的,
雖然 windows 上似乎不太容易使用,但相信假以時日一定可以的。而讓我卻步最大的
問題點在於,不能用 gem 安裝,macports 也找不到 QtRuby. 也就是說,
我得親自 ./configure make make install, 但我不喜歡這樣,管理不便。
所以我決定還是暫時放下他,等他有 gem 或是 port 時再說吧!
FXRuby 因為沒用過 FOX, 所以也還是放著再說。更何況據說是沒有 mac 版,
那我試屁啊﹍。所以左右思量之下,我還是決定先試 wxRuby! 安裝方便,
強大的跨平台能力,雖然是 C++ style 而非 the ruby way, 但對我來說
C++ style 也不是那麼地令人排斥,也許有點詭異,但我覺得也可以用自己想要的
方式重新 wrap 一次,對 ruby 來說那是如此簡單的事!
so have a try with wxRuby!
this is the hello world:
require 'rubygems'
require 'wx'
class HelloWorld < Wx::App
include Wx
def on_init
helloframe = Frame.new nil, -1, "Hello World"
StaticText.new helloframe, -1, "Hello World"
helloframe.show
end
end
HelloWorld.new.main_loop
sudo port install wxwidgets
sudo gem install wxruby
作者: godfat 真常 在 7/22/2007 12:52:00 下午
--
Nobody can take anything away from him.
Nor can anyone give anything to him.
What came from the sea,
has returned to the sea.
Chrono Cross
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.135.28.18
推
07/24 13:43, , 1F
07/24 13:43, 1F
討論串 (同標題文章)
Ruby 近期熱門文章
PTT數位生活區 即時熱門文章