新規作成  編集  Ruby-GNOME2 Project Website  ページ一覧  検索  更新履歴  編集履歴  RSS  Back  ログイン

gtk2-tut-togglebutton 差分 - Ruby-GNOME2 Project Website

  • 最後の更新で追加された部分はこのように表示します。
  • 最後の更新で削除された部分はこのように表示します。

= トグルボタン

{{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