ruby-****@lists*****
ruby-****@lists*****
2003年 7月 8日 (火) 03:13:34 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)の部分にシグナルを書いてみるわけ。あとはマウスでクリックしてみたりキーボード叩いてみたりしてそのシグナルの意味を「体感」して調べてみるわけだ。 - ((<むとう>)) ------------------------- = シグナルの動きを調べる 各ウィジェットが持つシグナルは一体どのような時に使えばいいのだろう。 代表的なシグナルやサンプルがあるものは良いのだけど、本家の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)の部分にシグナルを書いてみるわけ。あとはマウスでクリックしてみたりキーボード叩いてみたりしてそのシグナルの意味を「体感」して調べてみるわけだ。 - ((<むとう>))