Edited at

【Ruby de GUI】FxRubyを使ってGUIアプリケーションを作ってみよう!

More than 3 years have passed since last update.


FxRuby

FxRubyはRubyのGUIツール、ライブラリです。もともとRubyが好きでやっていたのですが、GUIを作ってみたいなぁと思った時に、ふと目に入ったのがこれでした。Rubyはスクリプト言語なのでGUIアプリケーションでも簡単なコードの記述で作ることができます。


FxRubyの導入

Rubyとgemが入っている前提でのインストールの方法を示します。RubyはこちらからDLできます。

まず、コマンドプロンプトを開き、

gem search fxruby

と入力

するとこんな具合に

C:\Users\User>gem search fxruby

*** REMOTE GEMS ***

fxruby (1.6.33 ruby x64-mingw32 x86-mingw32, 1.6.20 universal-darwin-10 x86-linux, 1.6.19 universal-darwin-9 x86-mswin32-60, 1.6.14 mswin32)

fxrubyを発見

C:\Users\User>gem install fxruby

Successfully installed fxruby-1.6.33-x64-mingw32

Parsing documentation for fxruby-1.6.33-x64-mingw32
Done installing documentation for fxruby after 2 seconds
1 gem installed

これでインストールは完了です。


Hello!プログラム


どのようなプログラム?

hello, Worldのプログラムはいくらでもバリエーションがあるのですが、今回はメッセージボックスを使ってHello!と表示させましょう。


コーディング

ではさっそくプログラムを記述してみましょう。こちらにドキュメンテーションありますので、是非参考になさってください。

まず、

require "fox16"

include "Fox"

という感じに、プログラムの先頭で”fox16”のなかのFoxモジュールをインクルードします。Foxモジュールの中には

FXMainWindow

というMainWindowを作るクラスがあります。

app=FXApp.new

main=FXMainWindow.new(app, "Hello", :width=>323, :height=>200)
app.create
main.show(PLACEMENT_SCREEN)
app.run

というコードでウィンドウが作成されます。単にこの中にボタンを配置しても良いのですが、オブジェクト指向スクリプト言語の神髄を味わうため、これを継承してMyHelloというクラスを作りましょう。

class MyHello < FXMainWindow

def initialize(app, title="Hello!")
# main is window class
main=super(app, title, :width=>323, :height=>200)

btnHello=FXButton.new(main, "Click and say Hello!") # create the button

# Event
btnHello.connect(SEL_COMMAND) do |sender, sel, data|
msgBox=FXMessageBox.new(btnHello, "Hello from FxRuby", "Hello!", :opts=>MBOX_OK)
msgBox.execute
end
end
end

(ウィンドウのサイズを黄金比に近似させていたのがお分かりになりましたか?)では、これらのことを踏まえて最終的なコードととしては


 Hello_MessageBox.rb

require "fox16"

include Fox

class MyHello < FXMainWindow
def initialize(app, title="Hello!")
main=super(app, title, :width=>323, :height=>200)

btnHello=FXButton.new(main, "Click and say Hello!", :opts=>BUTTON_NORMAL|LAYOUT_CENTER_X|LAYOUT_CENTER_Y)

btnHello.connect(SEL_COMMAND) do |sender, sel, data|
msgBox=FXMessageBox.new(btnHello, "Hello from FxRuby", "Hello!", :opts=>MBOX_OK)
# FXMessageBox.question(main, MBOX_OK, "Hello", "Hello")
msgBox.execute
end
end
end
app=FXApp.new
main=MyHello.new(app)
app.create
main.show(PLACEMENT_SCREEN)
app.run


こうなります。実行すると

Hello!というタイトルのウィンドウが表示され、ボタンを押すとメッセージボックスが表示されます。

2016-02-09.png


最後に

今回、このような記事を書かせていただいたのですが、実際私はFxRubyを使ってまだ1か月もたっていません。それゆえこの記事を更新したり、別の記事でFxRubyの話題を取り上げるかもしれません。日本語の資料があまりないため、手探りでFxRubyを習得していこうと思います!