热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

解决tk打包的exe文件运行时出现的叶子图标问题

转载记录https:www.cnblogs.comd0mainp7444837.html问题:使用pyinstaller将.py文件编译成.exe文件时ÿ

转载记录
https://www.cnblogs.com/d0main/p/7444837.html


问题:

使用pyinstaller将.py文件编译成.exe文件时,想要使用自己心仪的图标(.ico)比较麻烦。
在使用pyinstaller时,用参数:–i可以给生成的可执行文件设定自定义图标,但这只是给程序文件一个图标,而在程序开启后,窗口左上角的图标以及任务栏显示的却依旧是默认的tk图标(羽毛)。
在这里插入图片描述
如果想要在脚本中直接函数iconbitmap(‘图标路径’)来设定窗口左上角图标,虽然使用python编译器可以正确呈现自定义的图标,但是用pyinstaller编译成.exe文件之后,程序窗口可能组件呈现不出来或者干脆程序无法执行。
在这里插入图片描述


解决方法

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

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

import base64
with open("icon.py","w") as f:f.write('class Icon(object):\n')f.write('\tdef __init__(self):\n')f.write("\t\tself.ig='")
with open(r"F:\ICO图标素材\xxx.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能够创建并调用之。


可能类中的字符串长度很长很长。。。。不用在意


接下来就到我们的tk程序中调用这个类

import icon,os,base64
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’)

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


推荐阅读
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有