Ruby/TkでGUIプログラミング その2
Ruby/Tkでのプログラミングは、基本的に以下の流れとなります。
- tkライブラリの読み込み
- ウィジェットの作成
- イベントループ(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