我在Stack Overflow上找到了一些有关此问题的信息,并且一直在尝试,但它对我不起作用。我需要社区的帮助:)
正如标题所示,我想在我的tkinter窗口中添加* .ico。问题是当使用pyinstaller创建单个EXE文件时,这不是很直接。以下是我根据Stack Overflow上收集的信息实现的内容。在64位机器上使用Python 3.5。
我的脚本名称是calculator.py ico的名称是calculator.ico
1。我在Python脚本中添加了以下代码行:
import os
import sys
datafile = "calculator.ico"
if not hasattr(sys, "frozen"):
datafile = os.path.join(os.path.dirname(__file__), datafile)
else:
datafile = os.path.join(sys.prefix, datafile)
window = tkinter.Tk()
window.iconbitmap(default=datafile)
2a上。然后,我使用以下命令使用pyinstaller构建了我的单个EXE文件:
pyinstaller -w -F -i "C:\PythonProjects\Calc\calculator.ico" calculator.py
2B。我还尝试使用以下命令构建我的单个EXE文件 看看它是否会有所帮助:
pyinstaller --onefile --windowed --icon=calculator.ico calculator.py
第3。在pyinstaller构建了单个EXE文件之后,我在* .spec文件中添加了一些内容 - 下面是添加内容的完整* .spec文件:
# -*- mode: python -*-
block_cipher = None
a = Analysis(['calculator.py'],
pathex=['C:\\PythonProjects\\calc'],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
a.binaries + [('caclulator.ico', 'C:\\PythonProjects\\calc\\calculator.ico', 'DATA')],
a.zipfiles,
a.datas,
name='calculator',
debug=False,
strip=False,
upx=True,
console=False , icon='calculator.ico')
我将以下内容添加到exe = EXE:
+ [('caclulator.ico', 'C:\\PythonProjects\\calc\\calculator.ico', 'DATA')]
将上述内容添加到spec文件后,我运行了以下命令。
pyinstaller calculator.spec
重建EXE后,我运行EXE文件,收到以下错误消息:
提前致谢!
-Jeff
答案 0 :(得分:1)
你做的一切都是正确的。但你错过了最后一步。 在代码中添加以下行,它应该可以工作。
def resource_path(relative_path):
try:
base_path = sys._MEIPASS
except Exception:
base_path = os.path.abspath(".")
return os.path.join(base_path, relative_path)
然后打电话给你。
window.iconbitmap(default=resource_path(datafile))
答案 1 :(得分:1)
您需要做的就是将.ico映像放置在.py文件的根文件夹中,然后在使用pyinstaller从.py文件创建.exe时,键入以下内容 “ pyinstaller --onefile --icon = my.ico my.py”,指定图标的名称,否则必须为.ico文件。
答案 2 :(得分:0)
要删除窗口中的默认羽毛图标,请将其移动到.py文件的根文件夹,并使用iconbitmap方法并指定图标的名称,例如... 根= tk.Tk() root.iconbitmap(“ myIcon.ico”)