2013/08/10(土) [n年前の日記]
#1 [ruby] wxRubyをインストール
昨日作成したスクリプトを、Ruby/Tk でGUI化してたのだけど。どうも起動が遅いなと。wxRuby ならもうちょっと速く…いや、どうだろう…。試してみるかと。
Windows7 x64 + Ruby 1.9.3 の環境に wxruby をインストール。 _mas-lab.blog: wxRubyをWindowsで動かす を参考に、 _RubyForge: wxRuby: ファイルリスト から、wxruby-ruby19-2.0.1-x86-mingw32.gem をDLして、
Windows7 x64 + Ruby 1.9.3 の環境に wxruby をインストール。 _mas-lab.blog: wxRubyをWindowsで動かす を参考に、 _RubyForge: wxRuby: ファイルリスト から、wxruby-ruby19-2.0.1-x86-mingw32.gem をDLして、
gem install wxruby-ruby19-2.0.1-x86-mingw32.gemを実行。
◎ xrcise がエラーを出す。 :
wx_sugar なるものをインストールすると、xrcise という、XRC から .rb に変換してくれるツールが使えるようになるらしく。試しにインストール。
wxGlade 0.6.5 で作成した .xrc を渡してみたところ、エラー発生。
_xrcise not working - Ruby Forum が関係あるっぽい。 _Ruby 1.9ではStringクラスのeachは廃止された のでエラーが出ているらしい。「each_lineメソッドかlinesメソッドを使え」とのことなので…。
Rubyインストールフォルダ\lib\ruby\gems\1.9.1\gems\wx_sugar-0.1.22\lib\wx_sugar\xrc\outputter.rb を修正。str.each(',') を str.each_line(',') に書き換える。これでエラーは出なくなった。
出力された .rb を実行したらウインドウが開くはず。
若干違う .rb を吐き出してみる。
吐き出した .rb を require して、class を継承して表示するスクリプトを書いてみる。
xrcise は .xrc を .rb に変換してくれる、と思ってたけど。出力した .rb を覗いたら、.xrc を読み込んでレイアウトをしているように見えた。どうやら、 .xrc を読み込んで表示しやすくするための .rb を自動生成するよ、みたいなツールだったらしい…。
ということは、Ocra で exe化する際に、.xrc も同梱しておかないと、exe実行時に「.xrcが見当たらねえ」と文句を言われてしまいそうな予感。
gem install wx_sugarRuby インストールフォルダ\bin\ 以下に、xrcise.bat というファイルが出来ていた。
wxGlade 0.6.5 で作成した .xrc を渡してみたところ、エラー発生。
> xrcise -a App1 -o guitest.rb guilayout.xrc C:/ruby193mingw/lib/ruby/gems/1.9.1/gems/wx_sugar-0.1.22/lib/wx_sugar/xrc/outputter.rb:46:in `clean_id_attr_readers': undefined method `each' for #<String:0x2931678> (NoMethodError) from (erb):16:in `output' from C:/ruby193mingw/lib/ruby/1.9.1/erb.rb:838:in `eval' from C:/ruby193mingw/lib/ruby/1.9.1/erb.rb:838:in `result' from C:/ruby193mingw/lib/ruby/gems/1.9.1/gems/wx_sugar-0.1.22/lib/wx_sugar/xrc/outputter.rb:19:in `output' from C:/ruby193mingw/lib/ruby/gems/1.9.1/gems/wx_sugar-0.1.22/bin/xrcise:126:in `block (2 levels) in <top (required)>' from C:/ruby193mingw/lib/ruby/gems/1.9.1/gems/wx_sugar-0.1.22/bin/xrcise:125:in `each' from C:/ruby193mingw/lib/ruby/gems/1.9.1/gems/wx_sugar-0.1.22/bin/xrcise:125:in `block in <top (required)>' from C:/ruby193mingw/lib/ruby/gems/1.9.1/gems/wx_sugar-0.1.22/bin/xrcise:124:in `open' from C:/ruby193mingw/lib/ruby/gems/1.9.1/gems/wx_sugar-0.1.22/bin/xrcise:124:in `<top (required)>' from C:/ruby193mingw/bin/xrcise:23:in `load' from C:/ruby193mingw/bin/xrcise:23:in `<main>'
_xrcise not working - Ruby Forum が関係あるっぽい。 _Ruby 1.9ではStringクラスのeachは廃止された のでエラーが出ているらしい。「each_lineメソッドかlinesメソッドを使え」とのことなので…。
Rubyインストールフォルダ\lib\ruby\gems\1.9.1\gems\wx_sugar-0.1.22\lib\wx_sugar\xrc\outputter.rb を修正。str.each(',') を str.each_line(',') に書き換える。これでエラーは出なくなった。
出力された .rb を実行したらウインドウが開くはず。
若干違う .rb を吐き出してみる。
xrcise -o guilayout.rb guilayout.xrc
吐き出した .rb を require して、class を継承して表示するスクリプトを書いてみる。
#!ruby -Ku # # wxRuby + XRC を使ったGUI表示のテスト require 'rubygems' require 'wx' require_relative 'guilayout' class HtmlConvGui < MyFrame def initialize(parent = nil) super() # ボタンが押された時の処理を設定 evt_button(button_4.get_id()) { |event| on_buttonClick(event) } end # ボタンが押された時の処理 def on_buttonClick(event) s = "こんにちはこんにちは" Wx::message_box(s, '挨拶', Wx::OK | Wx::ICON_INFORMATION) end end class App < Wx::App def on_init f = HtmlConvGui.new f.show end end App.new.main_loop
xrcise は .xrc を .rb に変換してくれる、と思ってたけど。出力した .rb を覗いたら、.xrc を読み込んでレイアウトをしているように見えた。どうやら、 .xrc を読み込んで表示しやすくするための .rb を自動生成するよ、みたいなツールだったらしい…。
ということは、Ocra で exe化する際に、.xrc も同梱しておかないと、exe実行時に「.xrcが見当たらねえ」と文句を言われてしまいそうな予感。
[ ツッコむ ]
以上です。