« 予知の余地 | トップページ | 天文と気象 »

TkRadioButtonのメモ

 Ruby/Tk でラジオボタンを使うためのメモ。

 「Ruby アプリケーションプログラミング」とか、「Ruby を 256+ 倍使うための本 場外乱闘編」とかにあるサンプルを実行すると、少なくとも現状ではちょっと「えっ?」な結果になってしまう。

require 'tk'
x = TkVariable.new()
TkRadioButton.new(nil, 'text' => 'male ', 'variable' => x, 'value' => 'Male').pack
TkRadioButton.new(nil, 'text' => 'female', 'variable' => x, 'value' => 'Female').pack
TkButton.new(nil, 'text' => 'show value', 'command' => proc{p x.value}).pack
Tk.mainloop

 これを実行すると、
Tkradiobutton_test

 となって、どちらも選択された状態になってしまう。初期値を x に与えてないと駄目らしい。ということで、

x = TkVariable.new('Male')

 として実行すると、
Tkradiobutton_test02

 初期値のほうだけチェックされた状態で実行される。

 関連するふたつのラジオボタングループがあって、一方の選択によっては、もう一方の選択肢を制限したいといいうときには、こんな感じに。

require 'tk'
x = TkVariable.new("短大")
y = TkVariable.new("1年")
f1 = TkFrame.new.pack
f2 = TkFrame.new.pack
rb_s = TkRadioButton.new(f1, 'text' => "短大", 'variable' => x, 'value' => "短大").pack('side' => 'left')
rb_l = TkRadioButton.new(f1, 'text' => "大学", 'variable' => x, 'value' => "大学").pack('side' => 'left')
TkRadioButton.new(f2, 'text' => "1年", 'variable' => y, 'value' => "1年").pack('side' => 'left')
TkRadioButton.new(f2, 'text' => "2年", 'variable' => y, 'value' => "2年").pack('side' => 'left')
rb_3 = TkRadioButton.new(f2, 'text' => "3年", 'variable' => y, 'value' => "3年").pack('side' => 'left')
rb_4 = TkRadioButton.new(f2, 'text' => "4年", 'variable' => y, 'value' => "4年").pack('side' => 'left')
rb_3.state('disabled')
rb_4.state('disabled')
rb_s.bind 'Button', proc{ rb_3.state('disabled'); rb_4.state('disabled') }
rb_l.bind 'Button', proc{ rb_3.state('normal'); rb_4.state('normal') }

TkButton.new(nil, 'text' => 'show value', 'command' => proc{p x.value, y.value}).pack
Tk.mainloop

 実行するとこんな感じ。
Tkradiobutton_test03

 実用的な例かといえば微妙ではあるけれど、「短大」を選んだ状態では「3年、4年」は選択できないようになっていて、「大学」(4年制というつもりで)を選ぶと「3年、4年」も選択できるようになる。ただ、再び「短大」に戻したときに、「3年」とか「4年」にチェックは残ったままなので、そのあたりの処理は必要。

 で、現状の悩みは、こうした設定用のウィンドウとかダイアログ表示のウィンドウとかを出している間、それを閉じるまではメインの実行を停止させるにはどうしたらよいのかということ。sleep 使ってもうまく復帰してくれない。手順や方法の問題なのかもしれないけれど。

|
|

« 予知の余地 | トップページ | 天文と気象 »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/28835/49803470

この記事へのトラックバック一覧です: TkRadioButtonのメモ:

« 予知の余地 | トップページ | 天文と気象 »