[ruby-gnome2-doc-cvs] [Hiki] update - ラジオボタン

Back to archive index

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され,スクリプトは終了する.





ruby-gnome2-cvs メーリングリストの案内
Back to archive index