有没有人知道在Python脚本中嵌入图标的方法,这样当我创建独立的可执行文件(使用pyinstaller)时,我不需要包含.ico文件?我知道这可能与py2exe,但在我的情况下,我必须使用Pyinstaller,因为我没有成功使用前者。我正在使用Tkinter。
我知道iconbitmap(iconName.ico)
但如果我想创建一个可执行的文件,那就不行了。
答案 0 :(得分:14)
实际上,函数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)
希望它有所帮助!
答案 1 :(得分:8)
你可能不需要这个,但是其他人可能觉得这很有用,我发现你可以在不创建文件的情况下做到这一点:
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)
答案 2 :(得分:1)
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
答案 3 :(得分:0)
这对我有用:
from tkinter import PhotoImage
import base64
img = """
REPLACE THIS WITH YOUR BASE64 VERSION OF THE ICON
"""
img= base64.b64decode(img)
root = Tk()
img=PhotoImage(data=img)
root.wm_iconphoto(True, img)