Pygtk-signal-handling
提供:Dev Guides
PyGTK-信号処理
順次実行されるコンソールモードアプリケーションとは異なり、GUIベースのアプリケーションはイベント駆動型です。 * gtk.main()*関数は無限ループを開始します。 GUIで発生するイベントは、適切なコールバック関数に転送されます。
GObjectクラスから派生した各PyGTKウィジェットは、1つ以上のイベントに応じて*「シグナル」*を送信するように設計されています。 シグナル自体はアクションを実行しません。 代わりに、コールバック関数に「接続」されます。
一部の信号はウィジェットに継承されますが、一部の信号はウィジェット固有です。 たとえば、「toggled」信号は、toggleButtonウィジェットによって発行されます。
シグナルハンドラーは、gtk.widgetクラスの* connect()*メソッドを呼び出すことでセットアップされます。
handler_id = object.connect(name, func, func_data)
- 最初の引数 name は、キャッチする信号の名前を含む文字列です。
- 2番目の引数 func は、キャッチされたときに呼び出されるコールバック関数です。
- 3番目の引数 func_data は、この関数に渡すデータです。
- コールバックメソッドを一意に識別するために使用されるハンドラーID。
たとえば、ボタンがクリックされたときにonClicked()関数を呼び出すには、次の構文を使用します-
btn.connect("clicked",onClicked,None)
onClicked()関数は次のように定義されています-
def onClicked(widget, data=None):
コールバックメソッドがオブジェクトメソッドである場合、追加の引数として自己を受け取ります-
def onClicked(self, widget, data=None):
例
次の例では、ボタンがgtk.Windowに追加されます。 ボタンをクリックすると、「Hello World」メッセージが出力されます。
import gtk
class PyApp(gtk.Window):
def __init__(self):
super(PyApp, self).__init__()
self.set_title("Hello World in PyGTK")
self.set_default_size(400,300)
self.set_position(gtk.WIN_POS_CENTER)
self.label = gtk.Label("Enter name")
self.entry = gtk.Entry()
self.btn = gtk.Button("Say Hello")
self.btn.connect("clicked",self.hello)
fixed = gtk.Fixed()
fixed.put(self.label, 100,100)
fixed.put(self.entry, 100,125)
fixed.put(self.btn,100,150)
self.add(fixed)
self.show_all()
def hello(self,widget):
print "hello",self.entry.get_text()
PyApp()
gtk.main()
Pythonプロンプトから上記のコードを実行します。 次の出力が表示されます-
ボタンが押されると、次の出力がコンソールに表示されます-
Hello finddevguides