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打包即可