pro*_*bat 6 python exe tkinter pyinstaller
我在 Stack Overflow 上找到了一些关于此的信息,并一直在尝试,但它对我不起作用。我需要社区的帮助:)
正如标题所示,我想将 *.ico 添加到我的 tkinter 窗口中。问题是当使用 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)
Run Code Online (Sandbox Code Playgroud)
2a. 然后,我使用以下命令使用 pyinstaller 构建了单个 EXE 文件:
pyinstaller -w -F -i "C:\PythonProjects\Calc\calculator.ico" calculator.py
Run Code Online (Sandbox Code Playgroud)
2b. 我还尝试使用以下命令构建我的单个 EXE 文件,看看它是否有帮助:
pyinstaller --onefile --windowed --icon=calculator.ico calculator.py
Run Code Online (Sandbox Code Playgroud)
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')
Run Code Online (Sandbox Code Playgroud)
我将以下内容添加到 exe = EXE:
+ [('caclulator.ico', 'C:\\PythonProjects\\calc\\calculator.ico', 'DATA')]
Run Code Online (Sandbox Code Playgroud)
将上述内容添加到spec文件后,我运行了以下命令。
pyinstaller calculator.spec
Run Code Online (Sandbox Code Playgroud)
重建 EXE 后,我运行 EXE 文件并收到以下错误消息:
提前致谢!
小智 2
你做的一切都是对的。但你刚刚错过了最后一步。在您的代码中添加以下几行,它应该可以工作。
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)
Run Code Online (Sandbox Code Playgroud)
然后调用这个。
window.iconbitmap(default=resource_path(datafile))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7651 次 |
| 最近记录: |