有没有人知道在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