wxPython

wxPythonはGUI(Graphic User Interface)のアプリケーションを生成するための異機種間で共通に使えるツールキットである。このツールキットの主たる製作者はRobin Dunn氏である。wxPythonは異機種間で共通に使えるC++で書かれたライブラリーであるwxWidgetsのラッパーである。

wxPythonのモジュール類

wxPythonのモジュール類は図のように分類される。

GDI
モジュールの分類

ControlsモジュールはGUIのよく使われるさまざまのウィジェットを提供する。例えばボタン、ツールバーそれにノートブックとかである。ウィジェットのことをMSWindowsではContorolsと呼ぶ。CoreモジュールはGUIの開発で使われる基本クラスからなっている。これには全てのクラスの母体となるObjectクラス、ウィジェットの配置を管理するSizer、イヴェント、そして点や長方形といった幾何学図形を描くためのクラスからなる。

wxPythonのAPI

wxPythonでアプリケーションを作成する上で基本になるものは各種のクラスが提供するメソッドとそれを適用させるオブジェクトである。ウィジェットはGUIアプリケーションを作成する上で基本になるオブジェクトである。MSWindows下ではウィジェットはControles と呼ばれている。一般的に言ってプログラマーと呼ばれている人々は二つのグループの分類される。アプリケーション製作者とライブラリー製作者である。wxPythonはアプリケーションを作成するプログラマーによって使われるライブラリーである。

wxPythonには多くのウィジェットが登場する。それらは機能上からいくつかに分類される。

基本ウィジェット

GDI
基本ウィジェット

これらは派生する各種のウィジェットに対して基本的な機能を提供するものである。これらは祖形(ancestors)と呼ばれる。通常はこれらを直接に使うことはない。

最上位ウィジェット

GDI
最上位ウィジェット

これらはアプリケーションを表現する「枠組み」を提供するウィジェット類である。これらはお互いに独立して使われる。

コンテナ

GDI
コンテナ

コンテナは他のウィジェット類を中に配置するために用いるウィジェットである。

動的ウィジェット

GDI
動的ウィジェット

これらのウィジェットはアプリケーションの利用者が何らかの応答(文字入力、チェックマークを入れる等)を想定し用いられるウィジェット類である。

静的ウィジェット

GDI
静的ウィジェット

これらのウィジェットはアプリケーションの利用者に情報提供のみを行うものである。

その他ウィジェット

GDI
その他のウィジェット

Statusbar、Toolbar、Menubarの機能を実装するときに使うウィジェットもある。

継承

wxPyhtonの各種のウィジェットの間には規定された関係がある。その関係はクラスの継承によって実現されている。継承はオブジェクト指向プログラミングでは無くてはならない機能である。ウィジェットも階層構造を持つように設計されている。ウィジェットも他のウィジェットから機能を継承している。既存のクラスはbaseクラス、親クラス、祖形クラスなどと呼ばれる。それらを継承したウィジェットを派生クラス、子クラス、後裔クラスと呼ばれる。

例えばボタン・ウィジェットを実装するためのwx.Buttonクラスを考えてみよう。wx.Buttonクラス下図のようには異なった四つのbaseクラスを継承して作られている。

GDI
wx.Buttonクラスの継承図

直近のクラスはwx.Controlクラスである。ボタンは小さいある種のwindowである。スクリーン上に提示されるウィジェットはwindowである。従ってそれらはwx.windowを継承して作られることになる。目に見えないオブジェクトもある。sizer、device contextそしてlocale(国際化対応)などがそれである。目に見えるがwindowでないものもある。colour, caret(点滅するカーソル)、そしてcursorがそれである。ウィジェットの全てがcontrolであるわけではない。wx.Dialogはcontrolではない。コンテナと呼ばれるウィジェットに配置されるウィジェットがcontrolである。これがwx.controlを独自のbaseクラスとする理由である。

全てのwindowは各種のイヴェントに反応できる。ボタン・ウィジェットもそうである。ボタンをクリックするとwx.EVT_COMMAND_BUTTON_CLICKEDというイヴェントが発生する。ボタン・ウィジェットはwx.Windowを継承することによってwx.EvtHandlerを継承している。各種のイヴェントに反応するためには個々のウィジェットはwx.EvtHandlerクラスを継承しなければならない。最後に全てのオブジェクトはwx.Objectクラスを継承しなければならない。