前言 我python開發的GUI界面(圖形用戶界面)一直是tkinter,打包exe一直是Pyinstaller。但是打包出來的exe圖標、狀態欄圖標、窗體左上角圖標一直是預設的羽毛,我想自定義。 效果 最後使用base64創建臨時ico解決了該問題 步驟 創建icoToBase64.py,內容如下 ...
前言
- 我python開發的GUI界面(圖形用戶界面)一直是tkinter,打包exe一直是Pyinstaller。但是打包出來的exe圖標、狀態欄圖標、窗體左上角圖標一直是預設的羽毛,我想自定義。
效果
- 最後使用base64創建臨時ico解決了該問題
步驟
- 創建icoToBase64.py,內容如下:
import base64
# ico轉base64
open_icon = open("./img/logo.ico", "rb")
b64str = base64.b64encode(open_icon.read()) # 轉換為base64編碼
open_icon.close()
write_data = "imgBase64 = %s" % b64str
f = open("./img/logo.py", "w+")
f.write(write_data)# 寫入文件
f.close()
- 創建img目錄,將準備好的logo.ico放入img目錄中。
- 運行icoToBase64.py文件,將ico轉換為base64,寫入py文件,得到logo.py。
- 引入logo.py,使用base64創建臨時logo,自定義窗體圖標與任務欄圖標。
from img.logo import imgBase64
# 創建臨時logo
def createTempLogo(): # 處理圖片
tmp = open("temp.ico", "wb+") # 創建temp.ico臨時文件
tmp.write(base64.b64decode(imgBase64)) # 寫入img的base64
tmp.close() # 關閉文件
...
createTempLogo()
root.wm_iconbitmap("temp.ico")# 使用wm_iconbitmap引入創建的ico
if os.path.exists("temp.ico"):
os.remove("temp.ico")# 創建logo後需刪除臨時logo
...
- 執行命令:pyi-makespec -F -w main.py。創建main.spec配置文件,自定義exe圖標。
# -*- mode: python ; coding: utf-8 -*-
# 打包命令:Pyinstaller main.spec
block_cipher = None
a = Analysis(
['main.py'],# 需要打包的文件
pathex=[],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False,
)
pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
exe = EXE(
pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
[],
name='批量修改照片拍攝時間_v0.0.1',# 打包後的名字
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=False,# 雙擊exe是否顯示cmd視窗
disable_windowed_traceback=False,
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
icon='./img/logo.ico'# 打包後的exe圖標
)
一般使用Pyinstaller打包,是使用命令的,各種參數就加在命令裡面,但其實還可以使用spec這種配置文件的打包方式,只需要運行Pyinstaller main.spec這個命令即可,無需在命令中添加參數。Analysis中的第一個列表就是需要打包的py文件,我這裡是打包main.py文件(支持添加多個)。EXE中也可修改,其中比較常用的就是name與icon,分別用於自定義打包後的exe名稱與exe圖標。
結語
最後不管是直接運行還是打包exe後運行,會發現窗體圖標、任務欄圖標、exe圖標都變成了自定義的圖標。
原文鏈接:https://xiblogs.top/?id=65