使用wxRuby进行GUI的开发
曾光誉
2023-12-01
前言:
wxRuby是一个开放源代码的GUI工具箱,它的底层基于跨平台由c++写成的wxWidgets。wxRuby能帮助你使用Ruby快速的创建GUI程序。
wxWidgets是一个成熟的跨平台GUI工具箱,它使用本地GUIwidgets,使得wxRuby也可以跨平台使用。
本文只为能让大家快速建立一个印象,想深入研究的请参考附上的原文链接。
项目主页:http://wxruby.rubyforge.org/wiki/wiki.pl
下载地址:http://rubyforge.org/frs/?group_id=35
一、Installing wxRuby2
原文:
http://wxruby.rubyforge.org/wiki/wiki.pl?Installation
wxruby最新的版本是wxruby2,但这实际上还是一个预览版,更稳定的版本是0.6.0
但不管了,我们要乐于尝试新的东西,安装wxRuby2最简单的办法是使用[rubygems], 如果你的机器上已经安装了rubygems:
1、gem install wxruby2-preview
等上一会儿,rubygems会显示wxruby相关的gems列表,选择一个与你的平台相符的。
然后rubygems会用一点时间下载gem... ...
2、装好之后你一定迫不及待的想运行一个ruby写的gui来看一下是什么样子,这儿有很多例子与gems一起被安装在你的ruby目录下,假定你的ruby在C盘下面,那么例子的路径如下(用unix与linux都是高手,不用我说太多废话吧):
C:\ruby\1.8.x\lib\gems\1.8\gems\wxruby2-preview-xxx-x.x.x\samples.
好,先运行一下来看一下吧, 转到命令行下面,输入下面的命令:
ruby -rubygems C:\ruby\1.8.x\lib\gems\1.8\gems\wxruby2-preview-xxx-x.x.x\samples\calendar\calendar.rb
哈哈,看到了吧
3、DIY欲望特别强烈的unixer&linuxer可能希望从源码来编译wxruby,请参考上面附上的原文
二、开始写我们的自己的第一个基于ruby的GUI程序
原文:
http://wxruby.rubyforge.org/wiki/wiki.pl?Getting_Started
请留意:这个例子是在windows xp下面实现的,在unix/linux下面应该也没有问题,但某些细节可能有些差异。
1、开门见山吧,直接写第一个程序,先别拿那些概念来烦你
[code] #require "wxruby" # wxruby 0.6.0
# OR
require "wx" # wxruby2
include Wx
class MinimalApp < App
def on_init
Frame.new(nil, -1, "The Bare Minimum").show()
end
end
MinimalApp.new.main_loop[/code]
2、解释一下,开头的引入,我们上面安装wxruby的时候,选择是wxruby2,所以应该注释掉第一行,直接使用
[code]require "wx"[/code]
就可以了
如果你选择的版本是0.6.0,那么你应该使用
[code]require "wxruby"[/code]
3、这一行
[code]class MinimalApp < App [/code]
很多ruby coder应该很熟悉了。
每个用wxruby写的代码文件中都应该包含一个继续了App的类。它负责程序的入口及gui事件的处理(好像是java的main()是不是?)
下面的[code]def on_init[/code]定义了一个方法,这个方法从App继承,你必须用自己的代码来覆盖它。
在这个例子中,我们自己的 on_init()方法创建了一个框,并且显示出来。
4、事实上现在的代码已经可以执行了,你切换到代码所在的目录下面:
ruby -rubygems minimal_app.rb
如果没有意外的话,应该显示出一个框,虽然什么都没有,但我们也感到很高兴 :)
5、好,再详细说一下
[code]Frame.new(nil, -1, "The Bare Minimum").show()[/code] 这段代码:
Frame.new() 调用了Frame这个类的构造器。
第一个参数nil,表示要构造的Frame是没有父窗口的,如果有的话,应该在这儿传送。
第二个参数 -1,这是一个标识,这个标识的作用放到后面再说吧
第三个参数"The Bare Minimum", 这是Frame的标题,并且会显示在任务栏上
第四个参数在本例中省略了,应该类似于这样"Point.new(100,100)",定义了Frame在桌面上出现的位置.
第五个参数在本例中省略了,应该类似于这样"Size.new(600,480)",定义Frame的初始大小
第六个参数也省略了,是关于窗体类似,默认的类型是"DEFAULT_FRAME_STYLE",关于这个参数更多东西,后面再了解吧。
好,你可以试一下这个有更多初始参数的Frame:
[code]Frame.new(nil, -1, "The Bare Minimum", Point.new(300,300), Size.new(800,100)).show()[/code]
6、最后,[code]MinimalApp.new.main_loop[/code]
创建一个App的实例,并调用它的mailloop方法来显示GUI,这个方法其实做了很多事,不再详细说了。
7、好,现在总结一下,我们一共做了这么几步:
require "wxruby"
include Wx
创建一个继承 App的类
覆盖一个方法 on_init()
创建一个实例
调用main_loop() 方法
三、有了一个大致的了解后,读一下这个吧:
http://wxruby.rubyforge.org/wiki/wiki.pl?Frames_(Part_1)
没有力气再翻译了。