使用python tkinter编写的界面,使用pyinstaller打包之后发现左上角的图标依然需要独立的文件,而没有被打包到exe里面去。
这里提供一种将图标一起放到exe里面的方法。
1.先将所需要的图标转换为.py文件下的base64数组格式
from tkinter import *
import webbrowser
import time, datetime
import re
import base64
open_icon = open("qq.ico","rb") #qq.icon为你要放入的图标
b64str = base64.b64encode(open_icon.read()) #以base64的格式读出
open_icon.close()
write_data = "img=%s" % b64str
f = open("qq.py","w+") #将上面读出的数据写入到qq.py的img数组中
f.write(write_data)
f.close()
2.将qq.py导入到你的主文件中
这里是先将qq.py的img数组的数据写入到tmp.ico中,重新恢复成临时的icon文件,然后将icon文件写入到窗口中,再将临时文件删除,这样就不需要多余的图标的。打包之后只有单个的exe文件。
# -*- coding: UTF-8 -*-
import tkinter
from tkinter import *
from tkinter import ttk,messagebox
from qq import img #导入base64格式的img
import base64,os
class TEST():
def __init__(self):
self.processBarLen = 1100
self.win = tkinter.Tk()
self.win.geometry("1120x494")
self.win.title("QQ.com")
self.setIcon()
self.win.resizable(0,0) #限制主窗口的大小为不可改变
self.win.mainloop()
def setIcon(self):
tmp = open("tmp.ico","wb+")
tmp.write(base64.b64decode(img))#写入到临时文件中
tmp.close()
self.win.iconbitmap("tmp.ico") #设置图标
os.remove("tmp.ico") #删除临死图标
if __name__ == "__main__":
MainWin = TEST()