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

シグナルとコールバックの仕組み

シグナルとコールバックの仕組み

GTKバージョン2.0では,シグナルシステムがGTKからGLibに移っている. ここでは,GTK 1.2のシグナルからGLib 2.0のシグナルへ移行する際に拡張された部分に関する詳細は扱わない.

helloworld.rbを詳しく見ていく前に、シグナルとコールバックについて説明しよう。 GTKはイベントドリブンのツールキットである。 すなわちイベントが発生するまでGtk.mainでスリープし、その後適切なメソッドへ制御を渡す.

制御の受渡しには"シグナル"のアイデアを使っている *1。 マウスボタンの押下のようなイベントが発生すると、その押されたウィジェットから適切なシグナルが"発行"される。 GTKの持つ便利な機能のほとんどで使われている仕組みがこれである。 シグナルには"destory"のように、全てのウィジェットが継承していて発行できるものや、トグルボタンの"toggled"のように、特定のウィジェット特有のものがある。

例えばボタンに何か処理をさせるには、シグナルを捉えて適切な処理を実行するようシグナルハンドラを設定する必要がある。 Ruby/GTK2ではGLib::Instantiatable#signal_connectメソッドを用いてシグナルハンドラの設定を行う.

GLib::Instantiatable#signal_connect("シグナル名") do
  # "シグナル名"に対する処理
end

GLib::Instantiatable#signal_connectメソッドの引数は,ウィジェットが捉えるべきシグナル名とそのシグナルを捉えた時に実行する処理を記述したブロックである. 以下ではこのブロックのことを"コールバックブロック"と呼ぶこととする.

このコールバックブロックは次のように引数を一つ取ることができる.

GLib::Instantiatable#signal_connect("シグナル名") do |w|
  # "シグナル名"に対する処理
end

この引数wにはシグナルを発行したウィジェットが代入される.


*1ここで言うシグナルは、用語は同じだが、Unixシステムでいうシグナルと同じものではなく、実装にも使われていない

更新日時:2005/10/18 14:07:27
キーワード:
参照:[gtk2-tut]