2016-12-11 48 views
0

私はPyinstallerを使ってwxPythonアプリケーションのWindows実行可能ファイルをビルドします。ウィンドウアイコンを追加して、pyinstaller --icon=test.ico --onefile --noconsole test.pywを実行すると、ビルドされた実行可能ファイルのすぐ隣にtest.icoファイルを置いた場合に限り、完全に問題ありません。これにより、私はexeとアイコンの両方を配布することができ、それは少なくとも不快です。PyinstallerでEXEにウィンドウアイコンを埋め込む

私もwxPythonのアプリで

icon = wx.EmptyIcon() 
icon.CopyFromBitmap(wx.Bitmap("test.ico", wx.BITMAP_TYPE_ANY)) 
self.SetIcon(icon) 

を行います。

私の研究では、アイコンのbase64文字列をハードコードすることを提案していますが、紙面に自分のコードを印刷する必要があるため、非常に長い文字列です。私はthis other postを見て、それは私の答えを持っていると感じますが、私はそれを理解していません。

So. exeファイルにアイコンを埋め込むにはどうすればいいですか?

EDIT:あなたはすでにあなたの実行可能ファイルに.icoが含まれている--iconオプションで

# -*- mode: python -*- 

block_cipher = None 

a = Analysis(['test.pyw'], 
     pathex=['D:\\test'], 
     binaries=[], 
     datas=[], 
     hiddenimports=[], 
     hookspath=[], 
     runtime_hooks=[], 
     excludes=[], 
     win_no_prefer_redirects=False, 
     win_private_assemblies=False, 
     cipher=block_cipher) 
pyz = PYZ(a.pure, a.zipped_data, 
     cipher=block_cipher) 
exe = EXE(pyz, 
     a.scripts, 
     a.binaries, 
     a.zipfiles, 
     a.datas, 
     name='test', 
     debug=False, 
     strip=False, 
     upx=True, 
     console=False , icon='test.ico') 

答えて

0

まず.specファイル、。しかしwxPythonは.exeからそれを抽出する方法がありません(Windowsシステムコールを使用することでそれほど難しくないと思われますが、それは重要ではありません)。

したがって、今度は.ico-ファイルをファイルシステムに含める必要があります。

  1. がバンドルされたアプリケーションにアイコンファイルをインクルードする.specファイルを変更します。

    stackoverflow article linked by youはすでに答えを持っています。

  2. アプリケーションを実行すると、バンドルされたファイルが一時的な場所に解凍されます。あなたが参照する記事で指摘されているように、リソースパスはsys._MEIPASSで指定されています。完全なファイル修飾子を作成するときは、サブディレクトリ(例えば、images./images/icon.ico)を考慮することを忘れないでください。

は、あなたの.specファイルの変更、さらに要求されるように編集された

+0

を助けを得るためのアイコンを取得するコードを表示します。だからあなたは私のアプリにそのコードを追加する必要があると言いますか?しかしどこでどのように? – Javier

+0

'' CopyFromBitmap''では、他のstackoverplowポストに記述されているように、 '' "test.ico" ''を '' resource_path''の呼び出しの結果に置き換えます。 specファイルでは '' a.datas''に '' test.ico''を追加しています( '' icon = ''がバイナリにアイコンを追加することを忘れないでください)。 – nepix32

+0

パーフェクト。レコードのために、その記事の関数をwxPythonスクリプトに追加する必要があります。私はクラスのメソッドとしてではなく、それの外でした。うまく動作します。 – Javier

関連する問題