Python 将ico文件添加到pyinstaller中的可执行文件

Python 将ico文件添加到pyinstaller中的可执行文件,python,tkinter,python-3.5,pyinstaller,Python,Tkinter,Python 3.5,Pyinstaller,我在python3.5 我正在使用pyintaller 我在窗口中添加了一个自定义图标,以替换tkinter的默认羽毛图标 from tkinter import * from tkinter import messagebox import webbrowser calculator = Tk() calculator.title("TBE Calculator") calculator.resizable(0, 0) iconFile = 'calculator.ico' calcula

我在
python3.5

我正在使用
pyintaller

我在窗口中添加了一个自定义图标,以替换tkinter的默认羽毛图标

from tkinter import *
from tkinter import messagebox
import webbrowser

calculator = Tk()
calculator.title("TBE Calculator")
calculator.resizable(0, 0)
iconFile = 'calculator.ico'

calculator.iconbitmap(default=iconFile)
直接运行
program.py
文件时,图标工作正常

但是当使用

pyinstaller --onefile --windowed --icon=program.ico program.py
并从dist目录运行program.exe,它给出的错误如下

failed to execute script program
我也试过了

pyinstaller --onefile --windowed --icon=program.ico --add-data="calculator.ico;ico" program.py
但还是同样的错误

程序.spec文件

# -*- mode: python -*-

block_cipher = None


a = Analysis(['program.py'],
             pathex=['C:\\Users\\anuj\\PycharmProjects\\YouTubePlayer\\Program'],
             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,
          a.zipfiles,
          a.datas,
          name='calculator',
          debug=False,
          strip=False,
          upx=True,
          console=False , icon='program.ico')
删除行
calculator.iconbitmap(默认值=iconFile)
可以正常工作,但使用默认的羽化图标


如何将窗口图标文件包含在.exe可执行文件中?

尝试为图标文件提供绝对路径,并通过
数据
PyInstaller参数绑定
.ico
文件

数据
应该是元组列表,如
('what\u to\u bundle.ext','there\u to\u place\u it')
(请参阅),因此添加如下内容

...
binaries=[],
datas=[('calculator.ico', '.')],
hiddenimports=[],
...
因此,
calculator.ico
将被放置在应用程序的根目录中(然后绑定到一个文件中,pyinstaller创建一个可执行文件,该文件提取临时文件夹中的所有文件,然后以一个目录模式正常运行)

接下来,您可以使用PyInstaller设置的
sys.\u MEIPASS
变量从脚本中找到图标文件的路径(请参阅)。这应该可以做到:

import os
import sys
from tkinter import *
from tkinter import messagebox
import webbrowser

calculator = Tk()
calculator.title("TBE Calculator")
calculator.resizable(0, 0)

if getattr(sys, 'frozen', False):
    application_path = sys._MEIPASS
elif __file__:
    application_path = os.path.dirname(__file__)

iconFile = 'calculator.ico'

calculator.iconbitmap(default=os.path.join(application_path, iconFile))
calculator.mainloop()

我知道很晚了,但试着用

pyinstaller --onefile --windowed --icon program.ico program.py