有沒有人知道在Python腳本中嵌入圖標的方法,這樣當我創建獨立的可執行文件(使用pyinstaller)時,我不需要包含.ico文件?我知道這是可能的py2exe,但在我的情況下,我不得不使用Pyinstaller,因爲我沒有成功使用前者。我正在使用Tkinter。在python腳本中嵌入圖標
我知道iconbitmap(iconName.ico)
,但如果我想製作一個onefile可執行文件,那不起作用。
有沒有人知道在Python腳本中嵌入圖標的方法,這樣當我創建獨立的可執行文件(使用pyinstaller)時,我不需要包含.ico文件?我知道這是可能的py2exe,但在我的情況下,我不得不使用Pyinstaller,因爲我沒有成功使用前者。我正在使用Tkinter。在python腳本中嵌入圖標
我知道iconbitmap(iconName.ico)
,但如果我想製作一個onefile可執行文件,那不起作用。
其實函數iconbitmap只能接收一個文件名作爲參數,所以需要在那裏有一個文件。您可以在鏈接之後製作Base64版本的圖標(字符串版本),上傳文件並將結果複製到源文件中作爲變量字符串。將其解壓縮爲臨時文件,最後將該文件傳遞給iconbitmap並將其刪除。這很簡單:
import base64
import os
from Tkinter import *
##The Base64 icon version as a string
icon = \
""" REPLACE THIS WITH YOUR BASE64 VERSION OF THE ICON
"""
icondata= base64.b64decode(icon)
## The temp file is icon.ico
tempFile= "icon.ico"
iconfile= open(tempFile,"wb")
## Extract the icon
iconfile.write(icondata)
iconfile.close()
root = Tk()
root.wm_iconbitmap(tempFile)
## Delete the tempfile
os.remove(tempFile)
希望它有幫助!
非常感謝,這工作很好!你有沒有機會知道如何改變Matplotlib創建的圖形窗口中的圖標?我的應用程序現在已經有了我的圖標,但是當我繪製圖表時,新窗口仍然有TK標誌作爲圖標。許多人認爲你的幫助 – maupertius 2012-04-17 10:32:24
對不起,我不知道Matplotlib,但如果沒有改變圖標的功能,我不認爲有辦法。不是wm_iconbitmap在Matplotlib中工作嗎? – Saulpila 2012-04-18 03:18:19
你也許並不需要這一點,但其他人可能會發現這個有用的,我發現你能做到這一點,而無需創建一個文件:
import Tkinter as tk
icon = """
REPLACE THIS WITH YOUR BASE64 VERSION OF THE ICON
"""
root = tk.Tk()
img = tk.PhotoImage(data=icon)
root.tk.call('wm', 'iconphoto', root._w, img)
解決方案通過ALI3N
遵循以下步驟:
a = Analysis(....) pyz = PYZ(a.pure) exe = EXE(pyz, a.scripts, a.binaries + [('your.ico', 'path_to_your.ico', 'DATA')], a.zipfiles, a.datas, name=.... )
datafile = "your.ico" if not hasattr(sys, "frozen"): datafile = os.path.join(os.path.dirname(__file__), datafile) else: datafile = os.path.join(sys.prefix, datafile)
root = tk.Tk() root.iconbitmap(default=datafile)
因爲在您使用Pyinstaller編譯您的腳本後無法使用:
root = tk.Tk() root.iconbitmap(default="path/to/your.ico")
我的信息:python3.4,pyinstaller3.1.1
我得到錯誤:SyntaxError:(unicode錯誤)'unicodeescape'編解碼器無法解碼位置2-3中的字節:截斷\ UXXXXXXXX轉義 – alienware13user 2017-04-16 22:05:32
只是爲了更清楚:我要改變我的應用程序窗口(默認情況下有Tk的標誌)的圖標,而不是圖標我文件(可以使用Pyinstaller輕鬆完成) – maupertius 2012-03-30 13:12:41
啊哈!谷歌搜索多一點後,我發現堆棧溢出[這裏](http://stackoverflow.com/a/7675014/404469)的答案。這有幫助嗎? – gary 2012-03-30 14:26:33
是的,我以前見過那個。這完全是我的同樣的問題。我只是不明白他在那裏做了什麼。它確實看起來是正確的解決方案,也許我應該多挖一點。謝謝! – maupertius 2012-03-30 14:35:32