Ruby/TkでGUIプログラミング その2

Ruby/Tkでのプログラミングは、基本的に以下の流れとなります。

  1. tkライブラリの読み込み
  2. ウィジェットの作成
  3. イベントループ(Tk.mainloop)の起動


「2. ウィジェットの作成」では、各ウィジェットクラスのnewメソッドでインスタンスを生成し、packメソッドでフレームへ貼り付けます。
newメソッドの引数は、第1引数はそのオブジェクトを貼り付けるフレームの指定、第2引数以降はオブジェクトの属性と値のハッシュになります。


(基本的なウィジェットクラス)

フレームを作成します。クラス名は、TkFrameです。

fr1 = TkFrame.new.pack

ボタンを作成します。
command属性でボタンを押した際の処理を指定できます。
クラス名は、TkButtonです。

TkButton.new(nil, 'text'=>'閉じる', 'command'=>proc{exit}).pack   #ウィンドウを閉じるボタン

文字列表示をするラベルを作成します。
ラベル領域はユーザによる編集はできません。
クラス名は、TkLabelです。

TkLabel.new(nil, 'text'=>'Do you like Ruby?').pack

ユーザによる編集が可能な文字列表示領域です。
クラス名は、TkEntryです。

ent = TkEntry.new.pack   #入力された文字をentに代入


(サンプルプログラム)
文字を入力し"hello"ボタンを押すと、"Hello, World! Hello, <入力された文字>!!"と表示されるプログラムを作成しました。

#!/usr/bin/ruby

require 'tk'

fr1 = TkFrame.new.pack
TkLabel.new(nil, 'text'=>'Your name is ').pack('side'=>'top')
ent = TkEntry.new.pack('side'=>'top')
lab = TkLabel.new.pack
TkButton.new(nil, 'text'=>'exit', 'command'=>proc{exit}).pack('side'=>'right')
TkButton.new(nil, 'text'=>'hello', 'command'=>proc{lab.text("Hello, World! Hello, #{ent.value}!!")}).pack('side'=>'right')
Tk.mainloop


(実行結果)

画面表示

"hello"ボタン押下後