用pyinstaller打包一個exe程式
阿新 • • 發佈:2018-12-31
用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
如下:
修改程式左上角的’tk’圖示
# ...省略部分
root = Tk(className='資料生成器')
root.iconbitmap('gen.ico') # 加圖示
app = App(root)
root.mainloop()
如下:
替換’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