1. 程式人生 > >用pyinstaller打包一個exe程式

用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