[ruby-gnome2-doc-cvs] [Hiki] update - tips_signal

Back to archive index

ruby-****@sourc***** ruby-****@sourc*****
2003年 8月 10日 (日) 23:17:50 JST


-------------------------
REMOTE_ADDR = 210.249.204.48
REMOTE_HOST = 
        URL = http://ruby-gnome2.sourceforge.jp/?tips_signal
-------------------------
  = シグナルの動きを調べる
  各ウィジェットが持つシグナルは一体どのような時に使えばいいのだろう。
  
  代表的なシグナルやサンプルがあるものは良いのだけど、本家のAPIドキュメントにすらドキュメント化されていないシグナルも多く、そのようなシグナルは調べようがない(GTK+のソースコードを読む...なんてわけにはいかないよね(^^;))。
  
  そこで、以下のようなスクリプトを書いてみてはどうだろう。
  これを使うと、そのクラスがどのようなシグナルを持っていて、それぞれどのようなタイミングでシグナルが発行されるのかが「体感」できる。
  
    require 'gtk2'
    Gtk.init
    widget = Gtk::Button.new("click")        #(1)
    Gtk::Button.signals(false).each do |v|   #(2)
      p v
      widget.signal_connect(v) do
        p "#{v} is occured."
      end
    end
    Gtk::Window.new.set_default_size(100, 100).add(widget).show_all
    Gtk.main
  
  上記例ではボタンを使っているけど、(1),(2)をいじって調べたいウィジェット(厳密にはGLib::Objectのサブクラス)を書いてあげればよい。
  
  スーパークラスのシグナルも含みたい場合は(2)のfalseをtrueにすればOK。
  
  ウィジェットによっては大量のシグナルが発生してしまうかもしれない。その場合は、出力された名前から、自分が目的とする動作に近そうなシグナルを選んで、以下のようなスクリプトに書き直してみる。
  
    require 'gtk2'
    Gtk.init
    v = "clicked"                            #(1)
    widget = Gtk::Button.new("click")        #(2)
    widget.signal_connect(v) do
      p "#{v} is occured."
    end
    Gtk::Window.new.set_default_size(100, 100).add(widget).show_all
    Gtk.main
  
  これで(1)の部分にシグナルを書いてみるわけ。あとはマウスでクリックしてみたりキーボード叩いてみたりしてそのシグナルの意味を「体感」して調べてみるわけだ。
  
  - ((<むとう>))





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