ラジオボタン(RadioButton)

ラジオボタンは同一の変数を持つ(原則として2個以上の)ラジオボタンを一つのグループとし,そのグループの中で一つだけonになる特徴を持つボタンです.

このウィジェットは,言うまでもなく択一選択の際に用います.

Ruby/TkではTkRadioButtonクラスが相当します.

使用例を示します.

#!/usr/local/bin/ruby

require 'tk'

var = TkVariable.new('red')
w1 = TkRadioButton.new(nil, 
		       'text' => '赤',
		       'value' => 'red',
		       'variable' => var
		      )
w1.pack('side' => 'top', 'fill' => 'both')
w2 = TkRadioButton.new(nil, 
		       'text' => '緑',
		       'value' => 'green',
		       'variable' => var
		      )
w2.pack('side' => 'top', 'fill' => 'both')
w3 = TkRadioButton.new(nil, 
		       'text' => '青',
		       'value' => 'blue',
		       'variable' => var
		      )
w3.pack('side' => 'top', 'fill' => 'both')

w4 = TkButton.new(nil, 'text' => 'ボタン色変更',
		  'command' => proc{w4.background(var.value);w4.activebackground(var.value)})
w4.pack('side' => 'top', 'fill' => 'both')
w5 = TkButton.new(nil, 'text' => 'quit',
		  'command' => proc{exit})
w5.pack('side' => 'top', 'fill' => 'both')

Tk.mainloop
上記のプログラムを走らせると,最初下のようになります.

このとき,「ボタン色変更」ボタンをクリックすると,下のようになります.

ここで,緑のラジオボタンをクリックして「ボタン色変更」ボタンを押すと,下のようになります.

TkRadioButtonクラスのインスタンス変数を以下に示します.

インスタンス変数(抄)
インスタンス変数名 役割
activebackground マウスが乗っているときの背景色.
activeforeground マウスが乗っているときの前景色.
background 背景色.
foreground 前景色.
disabledforeground disabled状態のときの前景色.
anchor 配置場所.'n','e','s','w','center'等で指定.
bitmap 表示するbitmap.TkBitmapImageオブジェクトで指定.
image 表示するimage.TkPhotoImageオブジェクトで指定.
text 表示する文字列.
textvariable 表示する文字列変数.TkVariableオブジェクトで指定.
justify 文字列をよせる側."left","center","right"で指定.
borderwidth 枠の幅.整数値で指定.
cursor マウスカーソルの形.
highlightcolor ウィジェットにフォーカスがある時の枠の色.
highlightthickness ウィジェットにフォーカスがある時の枠の幅.
relief ウィジェットの凹凸.'raised'または'sunken'で指定.
wraplength 折り畳むときの1行の文字数.
command 実行するコマンドを記述します.proc{x}とすることで,rubyコマンドxを呼び出せます.このコマンドは,チェックボタンを重ねたマウスの左ボタンを離す時に実行されます.
height ウィジェットの高さ.
width ウィジェットの幅.
state ボタンの状態です.'normal','active'または'disabled'で指定します.'disabled'にすると,ボタンが反応しません.
value ボタンがonになっている時,変数に代入する値.
variable チェックボタンに対する値を格納する変数名.TkVariableオブジェクトで指定します.

代入する変数名が違えば別グループとみなされ,それぞれ一つずつ選択できます.例えばこんなプログラムの場合です.

#!/usr/local/bin/ruby

require 'tk'
var1 = TkVariable.new('red')
var2 = TkVariable.new('purple')

label1 = TkLabel.new(nil, 'text' => 'var1の色',
		     'background' => var1.value)
label1.pack('side' => 'top', 'fill' => 'both')
label2 = TkLabel.new(nil, 'text' => 'var2の色',
		     'background' => var2.value) 
label2.pack('side' => 'top', 'fill' => 'both')

w1 = TkRadioButton.new(nil, 
		       'text' => '赤',
		       'value' => 'red',
		       'variable' => var1,
		       'command' => proc{label1.background(var1.value)}
		      )
w1.pack('side' => 'top', 'fill' => 'both')
w2 = TkRadioButton.new(nil, 
		       'text' => '緑',
		       'value' => 'green',
		       'variable' => var1,
		       'command' => proc{label1.background(var1.value)}
		      )
w2.pack('side' => 'top', 'fill' => 'both')
w3 = TkRadioButton.new(nil, 
		       'text' => '青',
		       'value' => 'blue',
		       'variable' => var1,
		       'command' => proc{label1.background(var1.value)}
		      )
w3.pack('side' => 'top', 'fill' => 'both')
w4 = TkRadioButton.new(nil, 
		       'text' => '紫色',
		       'value' => 'purple',
		       'variable' => var2,
		       'command' => proc{label2.background(var2.value)}
		      )
w4.pack('side' => 'top', 'fill' => 'both')
w5 = TkRadioButton.new(nil, 
		       'text' => '水色',
		       'value' => '#00ffff',
		       'variable' => var2,
		       'command' => proc{label2.background(var2.value)}
		      )
w5.pack('side' => 'top', 'fill' => 'both')
w6 = TkRadioButton.new(nil, 
		       'text' => '黄色',
		       'value' => 'yellow',
		       'variable' => var2,
		       'command' => proc{label2.background(var2.value)}
		      )
w6.pack('side' => 'top', 'fill' => 'both')

quitbutton = TkButton.new(nil, 'text' => 'quit',
		  'command' => proc{exit})
quitbutton.pack('side' => 'top', 'fill' => 'both')

Tk.mainloop
実行時のサンプルは下図の感じになります.TkVariableクラスのオブジェクトvar1とvar2を代入先とするRadiobuttonウィジェットが3つずつ2グループあり,ラベルの背景色が独立して変化します.

戻る