python打包tkiner程序運行時任務欄圖標


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()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM