Help us understand the problem. What is going on with this article?

【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を習得していこうと思います!

drumath2237
≪リアルとバーチャルの健全な融和≫を目指して。 xR、CG、アバターシステムなどに興味があるB3学生
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away