日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

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

新聞中心

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

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

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

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

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

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

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

在MFC中,響應(yīng)消息通常需要定義OnXXX()虛函數(shù),而且需要在消息傳遞宏里面與某個(gè)消息掛上勾,然后在實(shí)現(xiàn)OnXXX()函數(shù)。
在VB中,IDE為你為某個(gè)控件的消息生成消息響應(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

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

2. Closure 里面可以訪(fǎng)問(wèn)當(dāng)前上下文

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

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

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)的元素的作用域可以被限定在一個(gè)很小的范圍,這樣對(duì)于代碼的維護(hù)和應(yīng)付變化都是具有非凡的意義。

3. 動(dòng)態(tài)打開(kāi)一個(gè)類(lèi)的能力使得擴(kuò)展基類(lèi)的功能變得簡(jiǎn)單

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

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

上面的例子來(lái)源于實(shí)際項(xiàng)目,為了使用方便做了很多封裝,后面還有一段測(cè)試代碼,所以有點(diǎn)長(zhǎng)。如果你也用Ruby Gnome開(kāi)發(fā)GUI,那么這個(gè)簡(jiǎn)易的Msgbox將會(huì)帶來(lái)很多方便。

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


網(wǎng)站名稱(chēng):如何實(shí)現(xiàn)RubyGnome作為GUI庫(kù)
文章網(wǎng)址:http://www.dlmjj.cn/article/dheeicd.html