Windowsでも動かしてみる

まだPyGtk版の半分くらいしかできてませんが、早めにwxPython版のWindowsでの動作確認をしてみます。

wxPythonのインストールは簡単です。最初はwxWidgetsを入れてからwxPythonを入れるという手順を踏まなければならないと思い込んでいたのですが、Pythonが入っている環境であればwxPythonを入れるだけで終わりです。PyGtkとは大違いです。wxWidgetsWin32ネイティブAPIのラッパーなので、それそのものはGtkほど大きなものじゃないんですね。

で、動かしてみたところ、Linux上では動作するソースなのにWindows上ではうまく動いてくれません。これはwxWidgetsが内部的に使っているGtkとWin32APIの違いでしょうか。

Can't expand/collapse hidden root node!

だそうです。Tree上で複数Rootに見せかけるために本当のRootを非表示にしているんですが、これをExpandするなということですね。別に支障のない箇所なのでコメントアウトしてみると無事起動。

ボタンのアイコンはID指定なのでwx標準のものなんですが、LinuxではGtkのものが使われています。Windows上ではどうなるんだろう、ComCtlのリソースあたりからとってくるのかな、と思っていたらなんか見たことないアイコンになりました。wxがWindows用に用意したデフォルトアイコンでしょうか。

それよりも気になるのがTreeCtrlのサイズ。起動時にはこんな変なサイズになってしまいます。ウィンドウサイズを変更すると最大化されます。WindowsのためにどこかのタイミングでAlignしなおすような処理を呼ばないといけないようです。なんにせよ動いてよかった。

そしていよいよpy2exeでexe化してみます。Gtk版ではGladeの問題でここで豆腐化してしまったので、ちょっと心配です。setup.pyはGtk用のものとほとんど同じで、includeだけ書き換えます。

from distutils.core import setup
import py2exe

py2exe_options = {
  "compressed": 1,
  "optimize": 2,
  "bundle_files": 2,
  "packages": "encodings",
  "includes": "wx"}

setup(
  options = {"py2exe": py2exe_options},
  windows = [
    {"script" : "aoisome.py"}],
  data_files=["aoisome.xrc"],
  zipfile = None)

一発でexe化成功。文字化けもありません。スクリーンショットpythonから起動したものですが、exeでもまったく同じです。