使用Pyinstaller将窗口图标嵌入EXE

时间:2016-12-11 17:47:52

标签: wxpython pyinstaller

我正在使用Pyinstaller为我的wxPython应用程序构建一个Windows文件可执行文件。我想添加一个窗口图标,只有将test.ico文件放在构建的可执行文件旁边,才能完成pyinstaller --icon=test.ico --onefile --noconsole test.pyw。这让我分发了exe和图标,这至少让人不舒服。

我也做

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

在我的wxPython应用程序中。

我的研究表明硬编码图标的base64字符串表示的建议,但它是一个非常长的字符串,因为我还需要在纸上打印我的代码。我看到this other post,我觉得它有我的答案,但我只是不明白。

因此。如何将图标嵌入到exe?

编辑:.spec档案

# -*- 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')

1 个答案:

答案 0 :(得分:0)

首先,使用--icon选项,您已将.ico包含在可执行文件中。但是wxPython无法从.exe中提取它(我想通过使用Windows系统调用它不会那么难,但这不是重点)。

因此,您必须第二次包含.ico - 文件,这次是在文件系统中。

stackoverflow article linked by you已有答案:

  1. 修改.spec文件以将图标文件包含在捆绑的应用程序中。

  2. 运行应用程序时,它会在临时位置解压缩捆绑的文件。正如您引用的文章中所指出的,资源路径在sys._MEIPASS中指定。在形成完整文件限定符时,不要忘记考虑子目录(例如images ./images/icon.ico)。

  3. 显示您的.spec文件修改和检索图标的代码以获得进一步的帮助