成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何實現Ruby Gnome作為GUI庫

開發 開發工具
Ruby Gnome可以幫助我們實現GUI庫的一些應用,并能解決一些GUI庫無法解決的相關問題。希望大家可以通過這篇文章學到更多的知識。

Ruby 是一個靈活易用的完全面向對象的語言。它的優秀特性完全可以幫助我們解決GUI庫無法解決的難題。下面就向大家詳細介紹有關Ruby Gnome作為GUI庫的應用方法。#t#

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

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

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

1. Closure 作為響應GUI消息事件

在MFC中,響應消息通常需要定義OnXXX()虛函數,而且需要在消息傳遞宏里面與某個消息掛上勾,然后在實現OnXXX()函數。
在VB中,IDE為你為某個控件的消息生成消息響應函數。
那么在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為你預先做了很多工作。ruby用代碼關聯“clicked”事件,用Closure作為消息響應,干凈利落。 表面上看,似乎ruby的方式也未必好很多,但是且慢,看下一個....

2. Closure 里面可以訪問當前上下文

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

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

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使得代碼“內聚”了,即相互關聯的元素的作用域可以被限定在一個很小的范圍,這樣對于代碼的維護和應付變化都是具有非凡的意義。

3. 動態打開一個類的能力使得擴展基類的功能變得簡單

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

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

 

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

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

責任編輯:曹凱 來源: kuqin.com
相關推薦

2009-12-15 13:41:49

Ruby向對象發送消息

2009-12-14 16:00:32

Ruby操作Oracl

2009-12-14 11:12:55

Ruby運行

2009-12-18 16:27:41

Ruby解析Json

2009-09-28 11:05:29

Ruby端口掃描

2009-12-18 17:29:02

Ruby創建XML

2022-02-11 14:12:34

Gnome屏幕共享共享屏幕

2009-12-15 14:09:39

Ruby創建可參數化類

2023-10-10 11:18:42

Spring數據庫

2009-12-18 15:06:10

Ruby常用庫

2015-10-10 11:00:05

RubyRails性能

2014-06-23 09:43:01

Ubuntu GNOM

2021-08-30 08:38:47

GNOME應用程序網站

2009-12-17 13:37:24

Ruby代碼塊

2009-07-06 15:55:52

Servlet例子Ruby

2015-10-14 17:27:18

性能

2014-03-19 09:19:44

KDE應用GNOME

2022-06-02 09:14:14

GNOME源碼編譯Linux 發行版

2023-02-14 13:32:55

2022-02-28 12:57:09

GNOMEPlasma桌面
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 伊人中文字幕 | 亚洲精品国产第一综合99久久 | 在线视频日韩 | 国产精品久久久久久久久免费樱桃 | 欧美大片在线观看 | 成人av片在线观看 | 国产成人影院 | 国产91黄色 | 国产一区二区三区 | 97国产在线观看 | 97国产精品 | 免费成人在线网站 | 成人激情免费视频 | 午夜在线视频 | 中文字幕高清av | 国产高清视频一区二区 | 免费的色网站 | 国产剧情一区 | 国产欧美日韩综合精品一区二区 | 蜜桃av人人夜夜澡人人爽 | 国产午夜视频 | 国产精品久久精品 | 欧美一区二区三区日韩 | 国产欧美一区二区三区在线看 | 国产精品成人在线观看 | 亚洲精品视频免费观看 | 久久久久久久国产 | 四虎在线视频 | 91九色porny首页最多播放 | 国产精品久久午夜夜伦鲁鲁 | 久久亚洲综合 | 欧美日韩在线一区 | 日韩成年人视频在线 | 国产农村一级片 | 成人h动漫亚洲一区二区 | 亚洲精品1区 | 成人久久一区 | 国产成人黄色 | 亚洲在线视频 | 婷婷在线免费 | 日韩视频在线一区二区 |