日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
如何實現(xiàn)RubyGnome作為GUI庫

Ruby 是一個靈活易用的完全面向?qū)ο蟮恼Z言。它的優(yōu)秀特性完全可以幫助我們解決GUI庫無法解決的難題。下面就向大家詳細(xì)介紹有關(guān)Ruby Gnome作為GUI庫的應(yīng)用方法。#t#

創(chuàng)新互聯(lián)是一家專業(yè)提供中原企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站設(shè)計、做網(wǎng)站、成都外貿(mào)網(wǎng)站建設(shè)公司H5技術(shù)、小程序制作等業(yè)務(wù)。10年已為中原眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設(shè)公司優(yōu)惠進(jìn)行中。

最近手上的一個項目剛好需要做一個Windows平臺的GUI程序,以前是用VB,雖然VB是Windows GUI的經(jīng)典工具,能夠快速進(jìn)行GUI原型開發(fā),但是一旦GUI元素多起來,且UI元素存在復(fù)雜關(guān)系,就很難維護(hù)....特別在后期,一旦需求有什么變化,再去調(diào)整UI,那個叫痛苦啊。因此就想用ruby試試,加上此次項目設(shè)計很多網(wǎng)絡(luò)通訊方面的需求,因此更加堅定了使用ruby的決心?,F(xiàn)在項目基本完工,再回過頭看,以前用VB開發(fā)時碰到的種種問題在新項目中都被很好地解決了。特別地,體會到了Closure對于GUI編程的重要性。不管未來在的GUI編程領(lǐng)域ruby是否能成為主流,但是可以預(yù)見那種語言一定是具備Closure(或類似)功能的。(或者只是我的美好愿望?)

GUI庫選型:
ruby發(fā)行包自帶TK庫,用于簡單的程序還可以,但是一旦有復(fù)雜界面需求時就難以滿足。目前比較成熟的GUI綁定庫有RubyFox,wxRuby 和Ruby Gnome. 鑒于GTK用的人比較多,加上GTK在Windows上的Runtime也是比較穩(wěn)定,GTK應(yīng)用的代表GIMP看起來也比較漂亮,因此就選擇了RubyGnome作為GUI庫。

關(guān)于Ruby Gnome我也不多介紹,其項目主頁上的文檔和教程非常不錯。
Ruby-Gnome項目的首頁: http://ruby-gnome2.sourceforge.jp/

1. Closure 作為響應(yīng)GUI消息事件

在MFC中,響應(yīng)消息通常需要定義OnXXX()虛函數(shù),而且需要在消息傳遞宏里面與某個消息掛上勾,然后在實現(xiàn)OnXXX()函數(shù)。
在VB中,IDE為你為某個控件的消息生成消息響應(yīng)函數(shù)。
那么在Ruby Gnome里面,這么做:

 
 
 
  1. button = Gtk::Button.new("Button A") 
  2. button.signal_connect("clicked") do 
  3. # ... when button clicked ... 
  4. msgbox "Button clicked !" 
  5. end 
  6. button = Gtk::Button.new("Button A")
  7. button.signal_connect("clicked") do
  8. # ... when button clicked ...
  9. msgbox "Button clicked !"
  10. end

在這一點上,MFC最為繁瑣不用說了。VB由IDE為你預(yù)先做了很多工作。ruby用代碼關(guān)聯(lián)“clicked”事件,用Closure作為消息響應(yīng),干凈利落。 表面上看,似乎ruby的方式也未必好很多,但是且慢,看下一個....

2. Closure 里面可以訪問當(dāng)前上下文

GUI編程經(jīng)常面臨的一個頭痛的問題是,UI元件通常需要是全局的,至少是窗口類內(nèi)全局。例如,希望button被按下的時候改變label的內(nèi)容,那么就要求在響應(yīng)button事件的代碼內(nèi)要能夠訪問label。在MFC中,label被迫成為全局。在VB中,你不能控制。在界面元素很多的時候,這可能會成為一個問題--你不得不仔細(xì)地為每一個UI元件命名以防止名稱沖突。

而在ruby中,由于Closure能夠訪問當(dāng)前上下文,因此正好可以完美解決這個問題:

button = Gtk::Button.new("Button A")
label = Gtk::Label.new("Hello")
button.signal_connect("clicked") do
label.text += "click "
end

button = Gtk::Button.new("Button A")
label = Gtk::Label.new("Hello")
button.signal_connect("clicked") do
label.text += "click "
end

ruby的Closure使得代碼“內(nèi)聚”了,即相互關(guān)聯(lián)的元素的作用域可以被限定在一個很小的范圍,這樣對于代碼的維護(hù)和應(yīng)付變化都是具有非凡的意義。

3. 動態(tài)打開一個類的能力使得擴(kuò)展基類的功能變得簡單

ruby能夠動態(tài)地打開一個類并往里面增加method的能力已經(jīng)不是什么新鮮事,對于這個特性也有很多爭議。但對于GUI編程來說,這確實是提供了很大的方便。

在GUI編程中,msgbox是很常用的一個工具。在Ruby Gnome中,Gtk::Window沒有msgbox這個接口,下面的例子就是封裝了一個易用的Msgbox類,并打開Gtk::Window類,增加msgbox函數(shù),這樣所有基于Gtk::Window的類都可以隨時調(diào)用msgbox。

上面的例子來源于實際項目,為了使用方便做了很多封裝,后面還有一段測試代碼,所以有點長。如果你也用Ruby Gnome開發(fā)GUI,那么這個簡易的Msgbox將會帶來很多方便。

Ruby作為GUI編程語言現(xiàn)在還不會成為主流,但是其動態(tài)特性將有助于解決傳統(tǒng)GUI編程中遇到的問題,而且隨著GUI binding lib的成熟,穩(wěn)定,Ruby,有望在又一個領(lǐng)域成為編程利器。


網(wǎng)站標(biāo)題:如何實現(xiàn)RubyGnome作為GUI庫
文章網(wǎng)址:http://m.5511xx.com/article/dheeicd.html