【wxPython】アプリケーションオブジェクトの作成

Appオブジェクトはアプリケーションの初期化を行います。
すべてのwxPythonアプリケーションには、Appオブジェクトが一つ存在しなければなりません。
また、他のどんなGUIオブジェクトよりも前にインスタンス化されている必要があります。
以下のコードが、すべてのwxPythonアプリケーションの基本となります。
Hello Worldっぽいアプリケーションです。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import wx


class MyApp(wx.App):
    def OnInit(self):
        wx.MessageBox("Hello wxPython", "wxApp")
        return True

if __name__ == '__main__':
    app = MyApp(False)
    app.MainLoop()

このスクリプトを実行すると、以下のようなメッセージボックスが表示されます。
f:id:hiron_tn:20140720220721p:plain

同じことをやるだけなら、以下のコードでもできます。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import wx

app = wx.App()
wx.MessageBox("Hello wxPython", "wxApp")
app.MainLoop()

どのように動くか

アプリケーションオブジェクトが作られたときに、OnInitメソッドが呼ばれます。
OnInitには、インスタンス生成の際にwx.Appのinitに加えたい操作を書きます。
このメソッドはオーバライドされ、アプリケーションを初期化するためのエントリーポイントとして使われます。
OnInitは引数を取らず、ブール値を返します。ブール値がFalseだとプログラムは即終了してしまいます。

この例では、MyAppの引数としてFalseを渡してAppオブジェクトを作りました。
この引数はwxPythonに出力をリダイレクトするか否かを教えるために使われます。

Appオブジェクトを作り、初期化が完了したら、あとはイベントループを始めるためにMainLoopメソッドを呼ぶだけです。
このメソッドはアプリケーションが生きている間に起こるすべてのイベントを受け取り、処理します。

さらなる詳細

wx.Appクラスのコンストラクタは、4つのオプションのキーワード引数を取ります。
wx.App(redirect=True, filename=None, useBestVisual=False, clearSigInt=True)

4つのオプションのキーワード引数は以下の通りです:
・redirect:標準出力をリダイレクト
・filename:リダイレクトがTrueのとき、リダイレクト先の出力ファイルを指定するために使われる
・useBestVisual:アプリケーションが最高のビジュアルを使用するかを指定する
・clearSigInt:これをTrueにセットすると、アプリケーションはCtrl+Cを押すことで終了できるようになる