.exe图标未改变 [py2exe]

4

我的图标文件myicon.ico和setup.py在同一个目录下。我使用py2exe编译后,生成的myproject.exe没有图标。我查阅了相关的解决方案,但是并未找到合适的方法。

setup.py的代码如下:

from distutils.core import setup
import py2exe

setup(
   windows=[{
         "script": "myproject.py",
         "icon_resources": [(0, "favicon.ico")],
      }]
)

操作系统:Win8.1 64位


上一次我遇到这样的问题(很久以前,32位),最终我使用了一个外部工具来更改图标。如果您在安装程序中创建一个链接并在链接本身上更改图标而不是在可执行文件上更改,则会获得额外的加分。 - Dima Tisnek
5个回答

8

看起来 py2exe 在处理图标时存在一个四年前的错误,但由于它的描述,我成功地制作了这个解决方法:

setup_dict = dict(
    windows = [{'script': "script.py",
                "icon_resources": [(1, "icon.ico")}],
)

setup(**setup_dict)
setup(**setup_dict)

这实际上是对项目进行了两次构建。如果您的项目很复杂,通过py2exe处理需要太长时间,您可以使用此方法来构建一个虚拟的py文件:
import tempfile
tf = tempfile.NamedTemporaryFile(delete=False)
tf.close()
setup(
    windows = [{
        'script': tf.name,
        "icon_resources":[(1, "icon.ico")]}]
)
os.remove(tf.name)

请不要忘记设置排除项,例如您的项目,否则您将在dist文件夹中收到不想要的文件。


1
这对我有用。第一次调用setup()不会产生图标,但是所有后续的调用都会产生。因此,在第一次调用setup()时需要使用虚拟的.py文件。类似的解决方案也在这里报告过。 - crayzeewulf
太好了!这对我解决了问题。嵌入的图标文件在48x48层以上无法呈现,但现在可以了。 - Pod

3

请尝试这个

from distutils.core import setup

setup(
    options = {'py2exe': {'bundle_files': 1}},
    zipfile = None,
    windows = [{
            "script":"myproject.py",
            "icon_resources": [(1, "favicon.ico")],
            }],
)

当我尝试这个时,它会显示“win64上尚不支持bundle-files 1”。如果我删除“options = {'py2exe': {'bundle_files': 1}}”,图标不会改变。如果我使用32位系统以便能够使用bundle_files:1,那么在64位系统中是否有效?或者您有其他建议吗?感谢您的回答。 - furkantokac
我曾经遇到过64位的同样问题,但是我忘记了。我会在我的旧项目代码中找到它。你可以为32位Windows投票支持。 - jatinkumar patel
我刚在32位系统中尝试了这段代码,它可以正常工作,没有任何bundle_files:1的问题,但图标没有改变!问题可能是关于图标文件的吗?我尝试了256x256和64x64的.ico图像。 - furkantokac

2

我是这样解决我的问题的:

  1. 我使用了我在问题中发布的上面的代码。
  2. 然后我安装了Resourch Hacker程序。
  3. 我用Resourch Hacker程序打开了myprogram.exe文件。
  4. 然后选择Action > Replace Icon > 选择我想要的图标。
  5. 完成!

如需查看Resourch Hacker教程,请点击此处


即使我已经找到了解决方案,如果有人知道如何直接使用py2exe来完成它,那么它可能会更好。 - furkantokac

0

0

我使用了另一个程序,在这篇文章中发现了pyinstaller 链接 ,第一次就成功了。

安装它:

pip install pyinstaller

编译我的程序:

pyinstaller myprogram.py -i icon.ico

第一次就成功了!希望能有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接