Python - tkinter把图标一起打包到替换图标exe
前言:使用pyinstaller打包好后的exe,图标巨难看。对于强迫症的博猪,受不了一点
使用python tkinter编写的界面,pyinstaller打包之后发现左上角的图标依然需要独立的文件,而没有被打包到exe里面去。
询问高级顾问(百度)得如下解决方案:
一、先将所需要的图标转换为.py文件下的base64数组格式
新建一个py文件,将ico转换为base64的文件夹
# -*- coding: UTF-8 -*- import base64 open_icon = open("Image.ico", "rb") # Image.icon为你要放入的图标 b64str = base64.b64encode(open_icon.read()) # 以base64的格式读出 open_icon.close() write_data = "img=%s" % b64str f = open("logo.py", "w+") # 将上面读出的数据写入到logo.py的img数组中 f.write(write_data) f.close()
二、执行一下,你会获得logo.py的文件
长这样:
接下来你需要将此文件的img导入到主文件中
三、将logo.py导入到你的主文件中
这里是先将logo.py的img数组的数据写入到gui_icon.ico中,重新恢复成临时的icon文件,然后将ico文件写入到窗口中,再将临时文件删除,这样就不需要多余的图标的。打包之后只有单个的exe文件。
icon = open("gui_icon.ico", "wb+") icon.write(base64.b64decode(img)) # 写入到临时文件中 icon.close() root.iconbitmap("gui_icon.ico") # 设置图标 os.remove("gui_icon.ico") # 删除临时图标
最终运行:
优化一下代码排版:
# -*- coding: UTF-8 -*- import tkinter as tk from GUI_TESE.logo import img import base64,os class test(): def __init__(self): self.root = tk.Tk() self.root.title("GUI_Test") self.set_Icon() self.root.geometry('650x550+400+400') self.root.resizable(0,0) #限制主窗口的大小为不可拖动改变 self.root.mainloop() def set_Icon(self): icon = open("gui_icon.ico", "wb+") icon.write(base64.b64decode(img)) # 写入到临时文件中 icon.close() self.root.iconbitmap("gui_icon.ico") # 设置图标 os.remove("gui_icon.ico") # 删除临时图标 if __name__ == '__main__': test()
完事你用pyinstaller打包出来的就是自带图标的啦!
作者:小林同学_Scorpio
本博客所有文章仅用于学习、分享和交流目的,欢迎非商业性质转载。
博主的文章没有高度、深度和广度,只是凑字数,做笔记。由于博主的水平不高,不足和错误之处在所难免,希望大家能够批评指出。
博主是利用参考、引用、抄袭、复制和粘贴等多种方式打造成自己的文章,请原谅博主成为一个无耻的文档搬运工!