py2exe打包,vista/win7下图标显示问题的解决方案

原文地址:http://guangboo.org/2013/01/10/exe-file-packaging-with-py2exe-cant-display-ico-in-vista-win7

windows下,在对python的编写的程序进行打包时,常用的工具就是py2exe了,该工具只需要一些脚本即可实现将python程序打包成一个exe文件。并且该exe程序的执行不需要系统预先安装python环境。windows下常见的gui程序在打包时,都不会缺少如下脚本:

setup(
    windows = [
        {
            "script": "with_gui.py",
            "icon_resources": [(1, "myicon.ico")]
        }
    ],
)

其中icon_resources参数是我们要讨论的重点。

按照上面的代码打包来的exe程序,在windows XP或server 2003系统下,我们可以看到exe的图标。但是当把程序拷贝到vista/win7下时,exe图标确变成了默认的"窗口"图标,无论怎么变换视图模式都是如此。

首先介绍一下ico文件,这对于理解其解决方案有很大帮助。

ico文件是windows下图片格式,我们看到的文件夹,执行文件等都有不同的图标显示,并且当我们切换视图模式(包括Thumbnails,Tiles,Icons, List, Details)时,文件的图标会以"不同"尺寸显示,确切的说,应该是不同的图标文件(尺寸亦不同)。ico文件里面可以有多个不同的图标文件以适应不同的视图模式,并且这些图标文件通常按尺寸大小的顺序存放。windows XP/server 2003下支持的ico尺寸为16x16,32x32和48x48。vista/win7下则最多可以支持到256x256。

在py2exe官网上贴出了一个解决方案(付出了血,汗,泪的代价):http://www.py2exe.org/index.cgi/CustomIcons,答案来源于http://stackoverflow.com/questions/525329/embedding-icon-in-exe-with-py2exe-visible-in-vista/6198910#6198910。问题关键在于ico文件中图标的顺序,XP和server 2003对顺序要求不高,无论是图标是按尺寸的正序还是倒序都可以正常显示,而然在vista/win7下却只能倒序。如果你使用png2ico工具的话,可以使用如下命令生成myicon.ico文件:

png2ico myicon.ico icon_128x128.png icon_64x64.png icon_48x48.png icon_32x32.png icon_16x16.png

而不是:

png2ico myicon.ico icon_16x16.png icon_32x32.png icon_48x48.png  icon_64x64.png icon_128x128.png

要提醒的是png2ico生成的ico文件效果不是太好,并且图标文件不能达到256x256,你不得不选择像248x248这样的尺寸来代替。这里推荐一个在线的转换工具ConvertIcon!,相比png2ico来说,后者可以定义图标的顺序,而ConvertIcon!则是从小到大的顺序存储图标文件。但另一个ico编辑工具可以解决这个顺序问题--Greenfish Icon Editor Pro,该工具不仅可以编辑图标文件,而且可以修改图标文件的顺序。

综上,为解决py2exe打包的exe程序在vista/win7下无法正常显示图标的问题,可以先使用在线工具ConvertIcon!来生成ico文件,然后使用Greenfish Icon Editor Pro将图标按尺寸倒序排列,同时还可以修补图标的细节。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值