gymnoの自由談

音楽系、プログラミング系の内容 方針はいずれ

macでwxglade

Mac OS X 10.6.6
wxWidgesをやろうと思い立ち wxWidgets本体およびwxPythonとwxGladeをインストールする

wxWidgetsはソースを落としてきて

% arch_flags="-arch i386"
% mkdir macbuild
% cd macbuild
% ../configure  --with-opengl --enable-geometry --enable-graphics_ctx --enable-sound --with-sdl --enable-mediactrl --enable-std_string --enable-display --enable-monolithic --enable-unicode --enable-odbc CFLAGS="$arch_flags" CXXFLAGS="$arch_flags" CPPFLAGS="$arch_flags" LDFLAGS="$arch_flags" OBJCFLAGS="$arch_flags" OBJCXXFLAGS="$arch_flags"

でよく (参照 Development: wxMac - WxWiki)
また wxPythonはバイナリパッケージがある


問題はwxGladeで 単にソースを落としてきて実行しても まず

%python wxglade

ImportError: /usr/local/lib/wxPython-unicode-2.8.11.0/lib/python2.6/site-packages/wx-2.8-mac-unicode/wx/_core_.so: no appropriate 64-bit architecture (see "man python" for running in 32-bit mode)

と怒られ さればとて

% export VERSIONER_PYTHON_PREFER_32_BIT=yes

とやっても

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

が出て悲しくなるだけだ

解決は
/usr/lib/python2.6/site-package/sitecustomize.py
というファイルをつくって

import sys
sys.setdefaultencoding('utf-8')

と画像のように書くとうまくいく

スタートアップファイルにこれを書いてもだめで 実際dir(sys)してもsetdefaultencodingなんて出てこない
[Python] UnicodeEncodeErrorが発生した場合は、sitecustomize.pyでデフォルトのエンコーディングを指定する。 - SumiTomohikoの日記
によると 

これは、pythonは起動が終了したら、sysモジュールからsetdefaultencoding関数を削除するためです。

ここで、pythonの起動時の処理を、少し詳しく説明します。pythonは起動時に、モジュールの検索パスを設定し、siteモジュールを読み込みます。Ubuntuなら、/usr/lib/python2.4/site.pyになります。sitecustomizeモジュールも、このsite.pyから読み込まれています。

以下興味深い説明が続く


これでwxGladeによるGUIアプリ作成にかかれる
windowslinuxでは見慣れたwxGladeの画面がmacっぽいルックアンドフィールになっていて面白い
たまに一部反応しなくなったりバグっぽい挙動もある