python打包tkiner程式執行時工作列圖示
阿新 • • 發佈:2020-12-29
tkiner程式碼本身的實現
root = Tk()
root.iconbitmap("favicon.ico") ##就是這句
Label(root, text="hello world").pack()
root.mainloop()
但是在釋出的時候會遇到找不到ico圖示的問題,那麼就要想辦法將ico一起打包成一個檔案釋出。(不用-F的程式除外,把ico放到程式目錄就可以了)
翻了翻資料,發現沒有直接的方法解決tkiner的圖示問題,一個思路是使用base64將ico圖片轉換成位元組。然後在程式執行時讀取位元組類來生成臨時的ico圖,標載入,然後刪除臨時圖示。
1、生成ico圖示的base64編碼
with open("icon.py","w") as f: f.write('class Icon(object):\n') f.write('\tdef __init__(self):\n') f.write("\t\tself.ig='") with open("favicon.ico","rb") as i: b64str = base64.b64encode(i.read()) with open("icon.py","ab+") as f: f.write(b64str) with open("icon.py","a") as f: f.write("'")
程式碼段執行後會生成一個icon.py的檔案,內容是一串編碼
2、將生成的程式碼放到tkiner的主程式中,這裡也可以使用外部引用,是一樣的
#class Icon的內容是複製formaticofile產生的ico檔案的base編碼,供tkiner.iconbitmap引用 class Icon(object): def __init__(self): self.ig='AAABAAEA...會有很多不要驚訝' root = Tk() with open('tmp.ico','wb') as tmp: tmp.write(base64.b64decode(Icon().ig)) root.iconbitmap('tmp.ico') os.remove("tmp.ico") Label(root, text="hello world").pack() root.mainloop()