« 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」カテゴリの記事

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

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

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

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1169291/53616976

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

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

広告欄


やっつけタイムライン

広告欄

はてブ

人目の訪問です。

  • follow us in feedly

    かなり更新が不定期なため、RSSリーダーをオススメします。現在Feedlyに122人登録頂いています。多謝!RSSを表示

    ブログランキング用 にほんブログ村 IT技術ブログ Pythonへ ブログランキングならblogram






    Jenny Mayhem
2017年11月
      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    

IT技術注目記事

無料ブログはココログ