wxFormBuilder

2010年10月17日 (日)

攻略!wxFormBuilder - レイアウト編 -

久々にwxFormBuilderでGUI設計してみたらなんとも思い通りにレイアウトが上手くいきません(;ω;)。
コツをすっかり忘れているなぁ、ということで我流だが一旦まとめておきます。

ついでなので簡単なチュートリアルも作ってみます。

追記 2015/6

すごい昔の記事ですが何故かメイン記事のwxRubyよりもアクセスが多いのでカテゴリ分けしました。2つしかないですが。

続きを読む "攻略!wxFormBuilder - レイアウト編 -"

| | コメント (0) | トラックバック (0)

2009年4月18日 (土)

wxFormBuilderの使い方

wxFormBuilderを起動して最初の画面がコレ。作った内容はプロジェクトという単位で管理していきます。右のプロパティでwxRubyのための設定をします。

01_3

wxRubyで必要な形式はXRCなのでその設定をします。右のプロパティでXRCにチェックを入れます。とりあえずはこれでOK。次に画面を作ります。

02_2

Formタブをクリックすると下にアイコンが出てきます。一番左のFrameをクリック。

03_4

ウィンドウが出てきました。コレにパネルやらボタンやらを配置して画面を作っていきます。今回はこれ以上追加せず、テストとしてこの画面のみ表示させてみます。

04

次にFrameの設定で必要な値をセットします。右のプロパティでsubclassのnameを設定します。ここではTest1という名前にしてみました。わかりやすい名前を付けましょう。

07

ココまでで準備OKです。FileよりSaveをしておきましょう。次にXRCコードの出力です。出力する前に実際の画面をプレビューできるので見ておきます。メニューのViewよりXRC Windowをクリックしましょう。

08

今画面で表示されているものと同じようなウィンドウが出てきたはずです。より実行時のイメージに近い表示となっているはずです。

09

確認できたらXRCファイルを生成します。FileよりGenerate Codeをクリックします。先ほどセーブしたプロジェクトファイルと同じ場所にnoname.xrcというファイルができているはずです。これが今エディットした画面のXRCファイルです。

10

画面の設計が終わったので、このXRCファイルを元にrubyのソースコードを作製します。コンバートしてくれるスクリプトがあるので、それにXRCファイルを引数として渡して実行します。下記が実行例です。

$ xrcise -a App1 -o App1.rbw noname.xrc

ファイルの中身はこんな感じです。gemでインストールしたので生成したファイルにrubygemsを加えています。

  1. require 'rubygems'
  2. require 'wx'
  3.  
  4. # This class was automatically generated from XRC source. It is not
  5. # recommended that this file is edited directly; instead, inherit from
  6. # this class and extend its behaviour there. 
  7. #
  8. # Source file: noname.xrc
  9. # Generated at: Sat Apr 18 02:04:25 東京 (標準時) 2009
  10.  
  11. class Test1 < Wx::Frame
  12.  
  13.   def initialize(parent = nil)
  14.     super()
  15.     xml = Wx::XmlResource.get
  16.     xml.flags = 2 # Wx::XRC_NO_SUBCLASSING
  17.     xml.init_all_handlers
  18.     xml.load("noname.xrc")
  19.     xml.load_frame_subclass(self, parent, "MyFrame1")
  20.  
  21.     finder = lambda do | x |
  22.       int_id = Wx::xrcid(x)
  23.       begin
  24.         Wx::Window.find_window_by_id(int_id, self) || int_id
  25.         # Temporary hack to work around regression in 1.9.2; remove
  26.         # begin/rescue clause in later versions
  27.       rescue RuntimeError
  28.         int_id
  29.       end
  30.     end
  31.  
  32.     if self.class.method_defined? "on_init"
  33.       self.on_init()
  34.     end
  35.   end
  36. end
  37.  
  38.  
  39. class App1 < Wx::App
  40.   def on_init
  41.     f =  ::Test1.new
  42.     f.show
  43.   end
  44. end
  45. App1.new.main_loop

では実行してみましょう。

$ ruby App1.rbw

こんな感じでウィンドウが表示されればOKです。ちょいと面倒な部分もありますが一回設定しておけばよいだけなのでそれほど手間ではないでしょう。

11

| | コメント (0) | トラックバック (0)