pyinstaller单个EXE文件 - tkinter主窗口标题中的ico图像

时间:2017-02-26 21:38:44

标签: python tkinter exe pyinstaller

我在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

3 个答案:

答案 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”)