大昔Tcl/Tkはいぢったことあるんだけど、Ruby/Tkは初めてなんでボタンの配置とか色々な記述ができるのがかえってわかりづらかったけど、それさえクリアしたら簡単に移植できた。
まあ元々シンプルだったからだけど、GUI周り以外はそのままRubyだからいじらなくていいし、ビックリするくらい簡単だった。
まず require 'gtk2'を'tk'に。
次に部品のレイアウト
msg = Gtk::Label.new("テキスト")
lbtn = Gtk::Button.new("表示")
rbtn = Gtk::Button.new("終了")
btns = Gtk::HBox.new
btns.add(lbtn)
btns.add(rbtn)
vb = Gtk::VBox.new
vb.add(msg)
vb.add(btns)
window = Gtk::Window.new.add(vb).show_all
が
msg = TkLabel.new{text "テキスト"}.pack
fr=TkFrame.new.pack
lbtn = TkButton.new(fr){text "表示"}.pack('side' => 'left')
rbtn = TkButton.new(fr,:text=>"終了").pack(:side => :left)
に。(LボタンとRボタンの記述をわざと変えてみた)
Ruby1.9以降なら
rbtn = TkButton.new(fr,text:"終了").pack(side: 'left')
なのかな(未確認)
rbtn.signal_connect("clicked") { Gtk.main_quit }
lbtn.signal_connect("clicked") { msg.set_text("クリック!") }
が
rbtn.command { exit }
lbtn.command { msg.text("クリック!") }
締めのGtk.mainがTk.mainloopと、これだけ
部品のnewの記述のとこは試行錯誤して時間かけたけど、Gtk版と対比しやすい記述にできて良かった。
というか、Tcl/TkやってたからRuby/Gtkを選んだんだったような気がしてきた。Tcl(←ティクル)がクセありすぎて挫折したしな。
まあ元々シンプルだったからだけど、GUI周り以外はそのままRubyだからいじらなくていいし、ビックリするくらい簡単だった。
まず require 'gtk2'を'tk'に。
次に部品のレイアウト
msg = Gtk::Label.new("テキスト")
lbtn = Gtk::Button.new("表示")
rbtn = Gtk::Button.new("終了")
btns = Gtk::HBox.new
btns.add(lbtn)
btns.add(rbtn)
vb = Gtk::VBox.new
vb.add(msg)
vb.add(btns)
window = Gtk::Window.new.add(vb).show_all
が
msg = TkLabel.new{text "テキスト"}.pack
fr=TkFrame.new.pack
lbtn = TkButton.new(fr){text "表示"}.pack('side' => 'left')
rbtn = TkButton.new(fr,:text=>"終了").pack(:side => :left)
に。(LボタンとRボタンの記述をわざと変えてみた)
Ruby1.9以降なら
rbtn = TkButton.new(fr,text:"終了").pack(side: 'left')
なのかな(未確認)
rbtn.signal_connect("clicked") { Gtk.main_quit }
lbtn.signal_connect("clicked") { msg.set_text("クリック!") }
が
rbtn.command { exit }
lbtn.command { msg.text("クリック!") }
締めのGtk.mainがTk.mainloopと、これだけ
部品のnewの記述のとこは試行錯誤して時間かけたけど、Gtk版と対比しやすい記述にできて良かった。
というか、Tcl/TkやってたからRuby/Gtkを選んだんだったような気がしてきた。Tcl(←ティクル)がクセありすぎて挫折したしな。