python tkinter把图标一起打包到exe中

使用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()       

 

PythonTkinter 中修改窗口左上角小图标后,使用 PyInstaller 打包运行时找不到图标,可尝试以下解决办法: #### 使用绝对路径 将图标文件的路径设置为绝对路径,保证程序在任何位置运行时都能找到图标。示例代码如下: ```python import tkinter as tk window = tk.Tk() window.title('标题') window.geometry('327x272') # 设置绝对路径 icon_path = 'D:\PycharmProjects\BinMerge\logo\Merge.ico' window.iconbitmap(icon_path) window.mainloop() ``` 不过这种方式在工程目录改变时,需要手动修改路径,不太灵活。 #### 动态获取路径 使用 `sys._MEIPASS` 来动态获取打包后程序的临时目录,同时结合 `--add-data` 参数将图标文件包含进打包中。示例代码如下: ```python import sys import os import tkinter as tk window = tk.Tk() window.title('标题') window.geometry('327x272') if getattr(sys, 'frozen', False): base_path = sys._MEIPASS else: base_path = os.path.dirname(os.path.abspath(__file__)) icon_path = os.path.join(base_path, "logo", "Merge.ico") window.iconbitmap(icon_path) window.mainloop() ``` 打包命令如下: ```sh pyinstaller --add-data "logo\Merge.ico;logo" --onefile --noconsole your_script.py ``` 在 Windows 系统中,`--add-data` 的分隔符是 `;`;在 Linux 或 macOS 系统中,分隔符是 `:`。 #### 将图标数据嵌入代码 将图标文件转换为 Base64 编码,嵌入到 Python 代码中,运行时再将其恢复成临时文件。示例代码如下: ```python import tkinter as tk import base64 import os # 假设这里是 Base64 编码的图标数据 img = '...' # 替换为实际的 Base64 编码数据 window = tk.Tk() window.title('标题') window.geometry('327x272') tmp = open("tmp.ico", "wb+") tmp.write(base64.b64decode(img)) tmp.close() window.iconbitmap("tmp.ico") os.remove("tmp.ico") window.mainloop() ``` 这样打包之后只有单个的 exe 文件,不需要额外的图标文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值