用pyinstaller打包一個exe程序

用pyinstaller打包一個tkinter的exe程序

今天用pyinstaller打了個小tk程序,整理了一些小問題的解決

打包單個exe文件

-F 選項可以打出一個exe文件,默認是 -D,意思是打成一個文件夾。

pyinstaller -F TestDataGen.py

打出的桌面程序去掉命令行黑框

-w 選項可以打桌面程序,去掉命令行黑框

pyinstaller -F -w TestDataGen.py

修改程序默認圖標

-i 可以設置圖標路徑,將圖標放在根目錄:

pyinstaller -F -w -i gen.ico TestDataGen.py

如下:

修改pyinstaller打出exe圖標

修改程序左上角的’tk’圖標

# ...省略部分
root = Tk(className='數據生成器')
root.iconbitmap('gen.ico')  # 加圖標
app = App(root)
root.mainloop()

如下:
修改tk圖標

替換’tk’圖標後,打包的exe執行失敗

原因是圖標沒有打進去,或者打包成文件夾,或者把圖標轉化成base64數據:

# 這段程序可將圖標gen.ico轉換成icon.py文件裏的base64數據
import base64
open_icon = open("gen.ico","rb")
b64str = base64.b64encode(open_icon.read())
open_icon.close()
write_data = "img = '%s'" % b64str
f = open("icon.py","w+")
f.write(write_data)
f.close()

修改主程序:

# ...省略部分
import base64
from icon import img
import os

# 將import進來的icon.py裏的數據轉換成臨時文件tmp.ico,作爲圖標
tmp = open("tmp.ico","wb+")
tmp.write(base64.b64decode(img))
tmp.close()

root = Tk(className='數據生成器')
app = App(root)
root.iconbitmap('tmp.ico')  # 加圖標
os.remove("tmp.ico")  # 刪掉臨時文件
root.mainloop()

再執行打包命令

pyinstaller -F -w -i gen.ico TestDataGen.py
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章