« wxpythonで長いタスク中でもレスポンシブなGUI。 | トップページ | Brown Dog Gadgetsの携帯・タブレット用USBソーラーパネルを使ってみた。 »

2013年10月16日 (水)

py2exeでwxPythonアプリをカッコ良い見た目でパッケージ化。

シングルファイルとしてパッケージ化するときの注意点

Wxpython_kakkoii Wxpython_kakkowarui

以前Python GUIツールキット個人的な比較のまとめという記事でwxPythonアプリをpy2exeでシングルファイルとして実行ファイルにパッケージ化すると、ソフトの見た目がWindows Classicな感じ(右図)になってしまう問題をちょっと書きました。とくにゲージとかボタンがしょぼいです。

まあ、見た目は見た目、使えればいいということでずっとほっておいた問題なんですが、ちょっとググったらThe Python Havenというブログにズバリな解決法を書いた記事を見つけました。長年のウヤムヤが解決されてスッキリして感激中です。

原因はマニフェストにありまして、昔試したときはマニフェストはXMLファイルだからファイルとしてother_resourcesに渡してみたらダメだったんですが、上記の記事によると実はなんとファイルじゃなくて文字列としてpy2exeに渡す必要があったみたいです。なぜに文字列?と小一時間問いつめたいところです。

gui2exeを使った場合の実際の手順

当方は楽なのでいつもgui2exe経由でpy2exeを使っているのでgui2exeでの手順を書きます。まず、一度gui2exeでシングルファイルとしてパッケージ化します(可能な限りOptimize=2, Compressed=2, Bundle Files=1でコンパクトな実行ファイルを作る)。次にgui2exeが自動生成したsetup.pyの中身をBuildsメニューからView setup scriptを選ぶか、またはショートカットのCtrl+Pで表示します。これを全部コピペしてソースがあるフォルダーにsetup.pyとして保存します。

次にsetup.pyファイル中に以下の内容をstringオブジェクトとして渡します。場所は「# Ok, let's explain why I am doing that.」のコメントの上あたりがいいとおもいます。要はother_resources = []の行の上であればいいです。

manifest = '''
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level='asInvoker' uiAccess='false' />
      </requestedPrivileges>
    </security>
  </trustInfo>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity
     type='win32'
     name='Microsoft.VC90.CRT'
     version='9.0.21022.8'
     processorArchitecture='*'
     publicKeyToken='1fc8b3b9a1e18e3b' />
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity
         type="win32"
         name="Microsoft.Windows.Common-Controls"
         version="6.0.0.0"
         processorArchitecture="*"
         publicKeyToken="6595b64144ccf1df"
         language="*" />
    </dependentAssembly>
  </dependency>
</assembly>
'''

次にother_resources = [] のところを

other_resources = [(24, 1, manifest)]

のようにします。24と1に関してはデルファイについてのAllAboutの記事

The WindowsXP.RC contains our instructions to include the WindowsXP.Manifest (XML) document as line item 1 bound to group 24. The contents of the WindowsXP.RC looks like this:

1 24 "WindowsXP.Manifest"

とあるので、まあウィンドウズのお約束なんでしょう。

あとはソースがあるフォルダーにコンソール上で移動して

python setup.py py2exe

のコマンドでパッケージ化を行います。

« wxpythonで長いタスク中でもレスポンシブなGUI。 | トップページ | Brown Dog Gadgetsの携帯・タブレット用USBソーラーパネルを使ってみた。 »

パソコン・インターネット」カテゴリの記事

Python」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: py2exeでwxPythonアプリをカッコ良い見た目でパッケージ化。:

« wxpythonで長いタスク中でもレスポンシブなGUI。 | トップページ | Brown Dog Gadgetsの携帯・タブレット用USBソーラーパネルを使ってみた。 »

しろののツイッタータイムライン

  • ツイッターは5つ目も凍結されました。6つ目での復活も不可能。なのでnoteに注力しています。

    と思ったら、イーロン・マスクの買収が公になってアカウントが復活できました。ありがとうマスク。

    トランプ関連記事の一覧リスト

オススメたち

2024年12月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

はてブ

無料ブログはココログ