ruby-****@lists*****
ruby-****@lists*****
2003年 5月 14日 (水) 10:08:01 JST
------------------------- REMOTE_ADDR = 61.26.70.211 REMOTE_HOST = URL = http://ruby-gnome2.sourceforge.jp/?%A5%C8%A5%B0%A5%EB%A5%DC%A5%BF%A5%F3 ------------------------- ------------------------- = トグルボタン {{image_right "toggle_button.png"}} トグルボタンは普通のボタンから派生したもので普通のボタンと非常に似ているが, クリックによって二つの状態のうちの一つを交互にとる点が異なる. 押し下げられている状態の時にクリックすると,持ち上がる.再度クリックすると,押し下げられる. トグルボタンはチェックボタンとラジオボタンの土台であり, トグルボタンの多くの呼び出しはラジオボタンとチェックボタンに継承されている. これらについてはラジオボタン,チェックボタンの項目で指摘しよう. 新しいトグルボタンを作成するには: Gtk::ToggleButton.new(label = nil, underline = false) Gtk::ToggleButton.new(stock) 容易に想像できるように,これらは普通のボタンウィジェットの呼び出しと同じように働く. 最初のものはラベルウィジェットをあらかじめパックしたトグルボタンを, 2番目のものはStockItemをあらかじめパックしたトグルボタンを作成する. トグルボタン(ラジオボタンおよびチェックボタンを含む)の状態はactive?で取得できる. トグルボタン(ラジオボタンおよびチェックボタンを含む)固有のシグナルに"toggled"シグナルがある. ボタンの状態をチェックするにはシグナルハンドラを設定して"toggled"シグナルを拾い, active?メソッドで状態を取得する. $ irb irb(main):001:0> require 'gtk2' => true irb(main):002:0> button = Gtk::ToggleButton.new => #<Gtk::ToggleButton:0x0a29a6a0 ptr=0x0a34f338> irb(main):003:0> button.signal_connect("toggled") do irb(main):004:1* puts "state = #{button.active?}" irb(main):005:1> end => 1 irb(main):006:0> button.signal_emit("clicked") state = true => nil irb(main):007:0> button.signal_emit("clicked") state = false => nil irb(main):008:0> button.signal_emit("clicked") state = true => nil irb(main):009:0> button.signal_emit("toggled") state = true => nil irb(main):010:0> button.signal_emit("toggled") state = true => nil "clicked"シグナルによってトグルボタンの状態が変化し, その結果として"toggled"シグナルが発行されハンドラブロックが実行されていることが分かる. "toggled"シグナルを発行してもボタンの状態は変化しない. トグルボタン(それとその子供であるラジオボタンとチェックボタン)の状態を強制的に変えるには 次のメソッドを使う: Gtk::ToggleButton#active=(state) Gtk::ToggleButton#set_active(state) 引数stateがtrueの場合はボタンは押し下げられた状態になり,falseの場合はボタンが上がった状態となる. 注意: Gtk::ToggleButton#set_activeを使い((*状態が実際に変更される*))と, トグルボタンから"clicked"シグナルが発行される. irb(main):011:0> button.signal_connect("clicked") do irb(main):012:1* puts "clicked" irb(main):013:1> end => 2 irb(main):014:0> button.active=true => true irb(main):015:0> button.active=false state = false clicked => false irb(main):016:0> button.active=true state = true clicked => true