一种使用pyinstaller时图标问题解决方案

一种使用pyinstaller时图标问题解决方案

0x00 场景

  使用pyinstaller将.py文件编译成.exe文件时,想要使用自己心仪的图标(.ico)比较麻烦。在使用pyinstaller时,用参数:--icon可以给生成的可执行文件设定自定义图标,但这只是给程序一个图标,而在程序开启后,窗口右上角的图标却依旧是默认的tk图标(羽毛)。

  如果想要在脚本中直接函数iconbitmap('图标路径')来设定窗口左上角图标,虽然使用python编译器可以正确呈现自定义的图标,但是用pyinstaller编译成.exe文件之后,程序窗口可能组件呈现不出来或者干脆程序无法执行。

  下面给出一种解决方案,可以有效又方便的解决程序内图标无效的问题。

0x01 解决方案

Step 1 将图标文件写在类中

准备:一个图标文件pen.ico

  图标文件同目录下首先创建一个py文件,源码如下:

import base64
with open("icon.py","a") as f: f.write('class Icon(object):\n') f.write('\tdef __init__(self):\n') f.write("\t\tself.img='") with open("pen.ico","rb") as i: b64str = base64.b64encode(i.read()) with open("icon.py","ab+") as f: f.write(b64str) with open("icon.py","a") as f: f.write("'")

  此时,在同文件夹下产生一个icon.py的模块。把它保存在类当中是为了让我们要编译的py能够创建并调用之。

Step 2 从在类中读出图标文件

  在我们要编译成可执行文件的脚本中,用

from icon import Icon
with open('tmp.ico','wb') as tmp: tmp.write(base64.b64decode(Icon().img)) root.iconbitmap('tmp.ico') os.remove('tmp.ico')

代替脚本中类似下面这样的语句

root.iconbitmap('pen.ico')

0x03 总结

  经过如上两步,就能在使用pyinstaller编译后正确的呈现自定义图标而且程序能够正常工作了。这种将文件在开发阶段编码后编译在可执行文件,到了程序运行的时候自动生成的方法也能够用到产生程序其他必要的文件中。

0x04 参考文献

  1. lion_cui. Pyinstaller 打包 Tkinter 程序时引入图标解决方法[EB/OL]. http://blog.csdn.net/lion_cui/article/details/51329497.

转载于:https://www.cnblogs.com/it-tsz/p/10534688.html

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值