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打包出来的就是自带图标的啦! 

 

posted @ 2023-11-22 17:10  小林同学_Scorpio  阅读(789)  评论(1编辑  收藏  举报
1