ruby-****@lists*****
ruby-****@lists*****
2003年 5月 16日 (金) 13:38:52 JST
------------------------- REMOTE_ADDR = 61.26.70.211 REMOTE_HOST = URL = http://ruby-gnome2.sourceforge.jp/?%A5%E9%A5%B8%A5%AA%A5%DC%A5%BF%A5%F3 ------------------------- = ラジオボタン ラジオボタンはチェックボタンに似ているが, グループ化されていて同時にそのうちの一つだけが選択される(押される)という点が違う. アプリケーションの中で少数の選択肢のリストから選択する必要がある場合にぴったりである. 新規のラジオボタン作成は次の方法のどれかで行われる: Gtk::RadioButton.new(label = nil, use_underline = true) Gtk::RadioButton.new(stock) Gtk::RadioButton.new(group, label = nil, use_underline = true) Gtk::RadioButton.new(group, stock) 上記の方法は2つのグループに分けることができる. 下側の2つの方法にはgroupという特別な引数があることがわかる. 複数のラジオボタンを適切に動作させるためには,各ラジオボタンを同一のグループに所属させる必要がある. 一つ目のラジオボタンは上側の2つの方法のどちらかで生成し, 二つ目以降のラジオボタンを生成する時は下側2つの方法を使用する. groupとして,直前に生成したボタンを渡すことでボタンの連鎖を生成することができる. 下に示す例を見ればよく理解できるだろう. button1 = Gtk::RadioButton.new("button1") button2 = Gtk::RadioButton.new(button1, "button2") デフォルトで選択されるボタンを指定するにはGtk::RadioButton#set_activeを用いるとよい. Gtk::RadioButton#set_activeは, ((<トグルボタン>))で説明したGtk::ToggleButton#set_activeとまったく同じように働く. いったんラジオボタンがグループ化されると,グループの中の一つだけがアクティブになることができる. ユーザーがラジオボタンをクリックし,次に他のボタンをクリックすると, 最初のラジオボタンでまず"toggled"シグナル(アクティブでなくなったことを報告する)が発生し, それから2番目のボタンで"toggled"シグナル(アクティブになったことを報告する)が発生する. 次の例は3つのボタンからなるラジオボタングループを作成する. #! /usr/bin/env ruby require 'gtk2' Gtk::init window = Gtk::Window.new(Gtk::Window::TOPLEVEL) window.title = "radio buttons" window.border_width = 0 window.signal_connect("delete_event") {Gtk::main_quit} box1 = Gtk::VBox.new(false, 0) window.add(box1) box2 = Gtk::VBox.new(false, 10) box2.border_width = 10 box1.pack_start(box2, true, true, 0) # 一つ目のラジオボタン生成時はgroup引数はいらない. button = Gtk::RadioButton.new("button1") box2.pack_start(button, true, true, 0) # 二つ目以降のボタン生成時は,直前のボタンウィジェットをgroupとして渡す. button = Gtk::RadioButton.new(button, "button2") button.active = true box2.pack_start(button, true, true, 0) button = Gtk::RadioButton.new(button, "button3") box2.pack_start(button, true, true, 0) # ここで # p button.group # してみよう.ボタングループは実際にはボタンウィジェットの配列として管理されていることがわかる. separator = Gtk::HSeparator.new box1.pack_start(separator, false, true, 0) box2 = Gtk::VBox.new(false, 10) box2.border_width = 10 box1.pack_start(box2, false, true, 0) button = Gtk::Button.new("close") button.signal_connect("clicked") {Gtk::main_quit} box2.pack_start(button, true, true, 0) # 以下の2行で,close ボタンをデフォルトウィジェットにする. button.flags |= Gtk::Widget::CAN_DEFAULT button.grab_default window.show_all Gtk::main スクリプトの最後の方の button.flags |= Gtk::Widget::CAN_DEFAULT button.grab_default はラジオボタンとは直接関係のない部分であるが解説しておく. この2行を実行することで,closeボタンはデフォルトウィジェットに設定される. ウィンドウ内でユーザがリターンキーを押した時にactivateされるのがデフォルトウィジェットである. この例では,リターンキーを押すとcloseボタンがactivateされ,スクリプトは終了する. ------------------------- = ラジオボタン ラジオボタンはチェックボタンに似ているが, グループ化されていて同時にそのうちの一つだけが選択される(押される)という点が違う. アプリケーションの中で少数の選択肢のリストから選択する必要がある場合にぴったりである. 新規のラジオボタン作成は次の方法のどれかで行われる: Gtk::RadioButton.new(label = nil, use_underline = true) Gtk::RadioButton.new(stock) Gtk::RadioButton.new(group, label = nil, use_underline = true) Gtk::RadioButton.new(group, stock) 上記の方法は2つのグループに分けることができる. 下側の2つの方法にはgroupという特別な引数があることがわかる. 複数のラジオボタンを適切に動作させるためには,各ラジオボタンを同一のグループに所属させる必要がある. 一つ目のラジオボタンは上側の2つの方法のどちらかで生成し, 二つ目以降のラジオボタンを生成する時は下側2つの方法を使用する. groupとして,直前に生成したボタンを渡すことでボタンの連鎖を生成することができる. 下に示す例を見ればよく理解できるだろう. button1 = Gtk::RadioButton.new("button1") button2 = Gtk::RadioButton.new(button1, "button2") デフォルトで選択されるボタンを指定するにはGtk::RadioButton#set_activeを用いるとよい. Gtk::RadioButton#set_activeは, ((<トグルボタン>))で説明したGtk::ToggleButton#set_activeとまったく同じように働く. いったんラジオボタンがグループ化されると,グループの中の一つだけがアクティブになることができる. ユーザーがラジオボタンをクリックし,次に他のボタンをクリックすると, 最初のラジオボタンでまず"toggled"シグナル(アクティブでなくなったことを報告する)が発生し, それから2番目のボタンで"toggled"シグナル(アクティブになったことを報告する)が発生する. {{image_right "radio_button.png"}} 次の例は3つのボタンからなるラジオボタングループを作成する. #! /usr/bin/env ruby require 'gtk2' Gtk::init window = Gtk::Window.new(Gtk::Window::TOPLEVEL) window.title = "radio buttons" window.border_width = 0 window.signal_connect("delete_event") {Gtk::main_quit} box1 = Gtk::VBox.new(false, 0) window.add(box1) box2 = Gtk::VBox.new(false, 10) box2.border_width = 10 box1.pack_start(box2, true, true, 0) # 一つ目のラジオボタン生成時はgroup引数はいらない. button = Gtk::RadioButton.new("button1") box2.pack_start(button, true, true, 0) # 二つ目以降のボタン生成時は,直前のボタンウィジェットをgroupとして渡す. button = Gtk::RadioButton.new(button, "button2") button.active = true box2.pack_start(button, true, true, 0) button = Gtk::RadioButton.new(button, "button3") box2.pack_start(button, true, true, 0) # ここで # p button.group # してみよう.ボタングループは実際にはボタンウィジェットの配列として管理されていることがわかる. separator = Gtk::HSeparator.new box1.pack_start(separator, false, true, 0) box2 = Gtk::VBox.new(false, 10) box2.border_width = 10 box1.pack_start(box2, false, true, 0) button = Gtk::Button.new("close") button.signal_connect("clicked") {Gtk::main_quit} box2.pack_start(button, true, true, 0) # 以下の2行で,close ボタンをデフォルトウィジェットにする. button.flags |= Gtk::Widget::CAN_DEFAULT button.grab_default window.show_all Gtk::main スクリプトの最後の方の button.flags |= Gtk::Widget::CAN_DEFAULT button.grab_default はラジオボタンとは直接関係のない部分であるが解説しておく. この2行を実行することで,closeボタンはデフォルトウィジェットに設定される. ウィンドウ内でユーザがリターンキーを押した時にactivateされるのがデフォルトウィジェットである. この例では,リターンキーを押すとcloseボタンがactivateされ,スクリプトは終了する.