为PyInstaller应用程序设置图标

7
我已经在Google、Reddit、StackOverflow和PyInstaller文档中找了很久,但仍然无法解决这个问题。
我正在尝试为我的应用程序设置图标,但它不起作用。图标被应用于主exe文件,但是当Windows打开时,在任务栏中不显示图标。
图标已经被包含在内。我已经将EXE中的icon值直接设置为图标路径。我使用过Resource Hacker,也使用过RCEDIT,但是后者会完全破坏我的应用程序。我真的无法让应用程序的图标正确显示。
我尝试过Windows 10和Windows 7。
即使我不使用-F运行Pyinstaller,它仍然无法加载图标。我可以百分之百确定我的文件是一个.ico文件,并且包含多个可接受的大小,Resource Hacker显示了.ico的所有可接受大小。

这是我正在使用的PowerShell命令:
pyinstaller -F -i C:\aNote\theme\anoteicon.ico --clean anotemain.spec

这是我的 .spec 文件
# -*- mode: python -*-

block_cipher = None


a = Analysis(['anotemain.py'],
             pathex=['C:\\aNote'],
             binaries=[],
             datas=[('c:\\aNote\\theme\\anoteicon.png','theme'), 
             ('c:\\aNote\\theme\\kabook.png','theme'), 
             ('c:\\aNote\\theme\\Python.svg.png','theme'), 
             ('c:\\aNote\\theme\\anoteicon.ico','.'), 
             ('c:\\aNote\\anoteui.py','.'),
             ('c:\\aNote\\version.txt','.')],
             hiddenimports=["PyQt5.sip", "QtGui", "QtWidgets", "pyperclip", "webbrowser", "csv"],
             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='aNote',
          debug=False,
          strip=False,
          upx=False,
          clean=True,
          runtime_tmpdir=None,
          console=False,
          icon='c:\\aNote\\theme\\anoteicon.ico',
          version='version.txt')
4个回答

5

在CMD中进入你的脚本所在文件夹(cd /Project)。 如果你的文件夹在d:中,先输入d:,然后再输入cd /Project

输入pyinstaller -w -F -i "icon.ico" script.py 以创建一个窗口应用程序。

或者,如果你的应用是控制台应用,则输入pyinstaller -F -i "icon.ico" script.py


4

您尝试过这个命令吗?

Pyinstaller.exe --onefile --windowed --icon=app.ico app.py

更新您的.spec文件并将console = True设置为真。

exe = EXE(pyz,
      a.scripts,
      a.binaries,
      a.zipfiles,
      a.datas,
      name='aNote',
      debug=False,
      strip=False,
      upx=False,
      clean=True,
      runtime_tmpdir=None,
      console=True,
      icon='c:\\aNote\\theme\\anoteicon.ico',
      version='version.txt')

使用示例代码,您可以运行窗口 UI 而非控制台:

from PyQt5 import QtGui

app = QtGui.QApplication([])
mainwindow = QtGui.QMainWindow()
mainwindow.show()

app.setWindowIcon(QtGui.QIcon('your.ico'))
mainwindow.setWindowIcon(QtGui.QIcon('your.ico'))
app.exec_()

1
我肯定有。 - AQuick
它可以工作,但是我不想打开控制台窗口。我想要它隐藏起来。我们该如何实现呢? - AQuick
@AQuick Easy,您可以使用PyQt5创建一个框架,然后隐藏控制台。我会在我的答案中发布代码。 - Saige Zhang
你的建议没有起作用。但是它激发了我的想法。我将一个.png文件分配给了窗口图标,而不是实际的.ico文件。将它从.png改为.ico,问题得到解决。 - AQuick
为了让图标正常工作,我不得不将图标路径放入一个列表中,因此我写成了 icon=['c:\\my\\file\\path\\icon.ico'] - scotscotmcc

1
我使用命令-i代替--icon来解决这个问题。
python -m PyInstaller --onefile -i='.\angular.ico' --name "MyApp" ".\main.py"

-1
简单快速的解决方案:
假设您正在使用:
Pyinstaller.exe --onefile --windowed --icon=app.ico app.py
但是Pyinstaller不能管理任务栏图标。
在您的虚拟环境中替换任务栏的图标文件,例如:

C:\python\venv\myproj311-32\Lib\site-packages\pygame\pygame_icon.bmp

没有额外的依赖,不需要编辑.spec文件。

你好,负责人,很高兴你们都知道。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接