Next Steps

イベント

イベントハンドリングは wxPython の鍵となるもののひとつです。
我々の知る全ての GUI システムはさまざまなアプリケーション間で情報を
流通させるためにイベントに頼っています。
特定のイベントが受信されたときに何を行うかは各 GUI アプリケーションの
働きで、イベントハンドリングと呼ばれます。


オブジェクトプログラミング以前は、イベントの取り扱いはイベントのタイプごとに
何を行うかを決定する switch 操作を表していました。

二つのイベントハンドリングの方法があります。

  • ひとつはイベントハンドラと呼ばれるものに依存します。イベントハンドラは特定のオブジェクトにアタッチされ、コールバック関数/メソッドを含みます。オブジェクトが特定のイベントを受信すると、イベントハンドラがコールバックを呼び出します。
  • もうひとつのアプローチは特定のイベントを扱うと仮定されたメソッドに決められた名前を与える方法です。この方法では、特定のイベントに対する特定のクラスの反応を修飾したいときに、クラスを派生させ、該当するメソッドをオーバーロードします。

wxPython はこれら二つのアプローチを兼ね備えます。新しい振る舞いを実装するためにクラスを派生させてイベントハンドラを定義できます。

self.Bind(wx.EVT_SOMETHING, ACallable) は以下を意味します。

SOMETHING イベントがこのウィンドウ (self) に届けられて、それが子ウィンドウのどれかからのものならば ACallable を呼び出します。
また、self は wxPython.window から派生されている必要があり、 ACallable は任意の関数です。
もっとも、プログラマーが選ぶのはたいてい前述のクラスの関数です。

二つ目のバージョン self.Bind(wx.EVT_SOMETHING, ACallable, srcWin) は以下を意味します。

srcWin によって SOMETHING イベントが生成され、それがウィンドウの階層を通って
このウィンドウ ( self ) まで到達したとき、ACallable を呼び出します。

しかし、いくつかのイベントはそれが生成されたイベントにのみ受け取られます ( つまり2番目の形は何もしないことを意味します )。
そのため基本的にどこででも、可能な限り、 Bind() メソッドを持たないメニューアイテムを除いては、最初の形を使用するのが最善です。