Pyinstaller 打包 Tkinter 程序时引入图标解决方法

Pyinstaller 打包 Tkinter 程序时引入图标解决方法

描述

在windows下开发python的gui程序时,多数使用pyinstaller, py2exe等打包工具.
在因为tkinter框架时,代码中使用iconbitmap引入程序框的图标样式,直接运行时没有问题,
但是在pyinstaller打包后会出现无法找到ico文件问题.
网上参考了几个解决方法都过于复杂(img2py, 或者修改spec打包参数)
下面我为大家带来一个非常方便可行的办法.

from Tkinter import *
root = Tk()
root.iconbitmap("icon.ico")
Label(root, text="hello world").pack()
root.mainloop()

为了适配pyinstaller能把icon文件引入,我们修改成程序,把icon.ico 修改为 icon.py

以下为py3.X适用

import base64
open_icon = open("icon.ico","rb")
b64str = base64.b64encode(open_icon.read())
open_icon.close()
write_data = "img = %s" % b64str
f = open("icon.py","w+")
f.write(wrte_data)
f.close()

 

以下PY2.x适用

from Tkinter import *
import base64
from icon import img

root = Tk()
tmp = open("tmp.ico","wb+")
tmp.write(base64.b64decode(img))
tmp.close()
root.iconbitmap("tmp.ico")
os.remove("tmp.ico")

Label(root, text="hello world").pack()
root.mainloop()

 

修改 hello.py源码,导入icon.py中的img, 创建一个临时的tmp.ico文件作为图标引入后删除即可

from Tkinter import *
import base64
from icon import img

root = Tk()
tmp = open("tmp.ico","wb+")
tmp.write(base64.b64decode(img))
tmp.close()
root.iconbitmap("tmp.ico")
os.remove("tmp.ico")

Label(root, text="hello world").pack()
root.mainloop()

最后使用pyinstaller打包即可

 
 
posted @ 2020-12-29 19:32  黑羽青衣  阅读(1421)  评论(0编辑  收藏  举报