wxPythonによるGUIツールの大量生産

========================
前置き
========================
ゲーム開発では大量のゲームデータを作成します。
今までの開発ではエクセルでゲームデータを作成していました。

がしかし、
クライアントが「ゲームデータを作成する専用ツールを大量に作らないといけない」なんて話をしていました。
「全部エクセルに入力でいいじゃん、、ツール作ったらそのツールのメンテは誰がするのよ」、、、、なんて思ったわけですが面白そうなのでやってみました。


========================
開発環境
========================
ツールを作成する環境ですが、最近Pythonというスクリプト言語GoogleでもMicrosoftでも使用されていると言うのを聞いて使ってみる事にしました。

GUIライブラリにはwxPythonを使用します。
これはウィンドウデザインをXMLファイルで行え、インターフェースと制御部分を綺麗に分離できて素敵。なんて思ったからです。


========================
作成ツール仕様
========================

python00.jpg

上のテキストボックスに文字列を入力して「変換」ボタンを押すと文字列の最後に「a」を付け加えて下のテキストボックスに出力します。


========================
環境インストール
========================

以下のソフトを使用します。インストール詳細はGoogleなどで調べてください。
Python 2.4
wxPython 2.6
XRCed 0.1.7
py2exe 0.6


========================
作成ファイル一覧
========================

これらのファイルを作成します。
python01.jpg

作成するファイルの内訳はここんな感じ

sample.py
プログラム本体。データの制御もここに記述する。

resource.xrc
resource.bat
ウィンドウデザインを記述するファイル。

make_exe.py
make_exe.bat
exeファイルを作成する為のファイル。


========================
ファイル内容
========================

sample.py
resource.xrc
resource.bat
make_exe.py
make_exe.bat


========================
作業の流れ
========================

python03.jpg

xrc を利用したwxPythonプログラミングではXRCedでウィンドウデザインを行う時に各コントローラーにIDを設定します。
そして sample.py の中でIDを使って各コントローラーを制御します。


================================================
XRCed でウィドウデザイン、各コントローラーにID付け
================================================
python02.jpg

トップはwxFrameになります。その下に wxPanel wxBoxSizer wxTextCtrl wxButton を画像の階層のように配置していきます。

sample.py で制御したいコントローラーにIDをふります。今回は wxPanel 以外のコントローラーにIDをふりました。
XRCed では「XML ID」という項目にID名を入れてください。
保存した resource.xrc では name="ID名" というかたちで書かれます。


================================================
xrcファイルをコンバート
================================================

xrcファイルの使用の仕方で xrcファイル のまま使用する方法と pyファイル にコンバートする方法があります。

前者はxrcファイルを修正するだけでウィンドウデザインを変更できます。
後者は配布するファイル数を減らせるという利点があります。

今回は配布後にウィンドウデザインを変更する事も無いので後者を選択しました。

resource.bat を実行すると resource.py が出力されます。
これを sample.py で import して使用します。


================================================
プログラム本体のsample.pyを作成
================================================

アプリケーションのクラスであるMyAppクラスを定義します。

OnInit() の中で resource の初期化、各コントローラーの取得、ボタンイベントのコールバック関数の設定、を行います。

EventButton() はボタンが押された時に呼ばれます。中では上のテキストコントローラーから文字列を取得して「a」を付け足して下のテキストコントローラーに設定しています。


================================================
py2exeで sample.exe を作成
================================================

ツールを配布する場合 sample.py のままだと利用者に PythonwxPython をインストールしてもらわれないといけません。それは大変なのでexeファイルになるようにpy2exeでコンバートをします。

make_exe.py に設定内容を書きます。外部ファイルがある場合はここいろいろ書くようなのですが今回は何も無いのでシンプルに。

注意する点として、make_exe.py を sample.py とは別のディレクトリに配置して 「setup(windows=["../sample.py"])」 などと記述すると resource が import されずに実行時にエラーになってしまいます。

無難に同じ場所に置いておいてください。

make_exe.bat を実行すると build と dist ディレクトリが作成されます。
dist の中のファイル全部を利用者に配布します。


========================
参考文献
========================

[Web]
PythonでGUIアプリケーションを作ろう! - NoboNoboRTD
MacOSXにおけるwxWidgetsでの開発方法 - りんごちゃんの知恵袋
Pythonで単体で動くバイナリを作ろう! - PythonMatrixJp
wxPythonによるGUIアプリケーションの作成 - 魅惑のPython
wxPythonを使ってみた - 根無し猫のひとりごと
wxPython Tutorial part 1 - wxPython

[書籍]
初めてのPython 第2版 オライリージャパン
Pythonクィックリファレンス オライリージャパン

========================
あとがき
========================

結構シンプルにプログラミングが行えるなぁ〜。
2つ目のツールからは雛型のコピペから始めたら結構短時間で作成が行えそうだ。
なかなか良いではないですか。

ただPythonはまだ情報が少ないので、とっつきにくいかもしれない。
.NETでのIronPythonの正式版がリリースされたらもっと利用者が増えて情報も増えるかな?
今後に期待したいと思います。