描述
在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.png 转换为 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打包即可
参考:
http://www.manongjc.com/detail/21-nopawowolwtczkw.html
http://www.ay1.cc/article/1674736786016549150.html