Python PyInstaller和包含窗口图标

6
我已经使用self.setWindowIcon(QtGui.QIcon('icon.png'))为我的PyQt应用程序设置了图标,当我在PyCharm中运行代码时,它可以正常工作。
接下来,我使用PyInstaller将我的应用程序转换为一个文件: pyinstaller.exe --onefile --windowed opc.py --name myapps 然而,当运行可执行文件时,图标不显示。我做错了什么?
在左侧是来自PyCharm的代码,右侧是来自一个文件(pyinstaller.exe --onefile --windowed opc.py --name myapps)的代码。为什么不一样? 我想要*.png图标,因为它是透明的。

enter image description here

2个回答

4

在Windows上运行可执行文件时显示的图标来自于可执行文件本身。如果想将图标与你的应用程序捆绑在一起,需要在使用pyinstaller.exe构建时指定该图标,并通过传递--icon参数来实现。例如:

pyinstaller.exe --onefile --windowed --name myapps --icon=icon.ico opc.py

请注意,与 setWindowIcon() 不同的是,图标文件必须以 .ico 格式存在,因此您需要先将其从 .png 转换。如果您想使用 PyQt 调用设置图标,则需要将图标文件捆绑到可执行文件中,可以使用 PyInstaller spec 文件来完成此操作。有关创建和修改 spec 文件的过程,请参见 此前的答案

这不是我想要的。我更新了我的问题并添加了照片。 - Luk
@Luk,请查看上面的编辑。您需要将.png文件捆绑到可执行文件中,以实现您想要的效果。链接的答案应该可以解决问题。 - mfitzp

0
我以以下方式解决问题:
我在代码中调用资源:
class MainWindow(QMainWindow):
    def __init__(self):
        icon_path = os.path.join(sys._MEIPASS, 'icon.ico')
        self.setWindowIcon(QIcon(icon_path))

sys._MEIPASS允许您在程序执行过程中访问生成的临时文件。

我将资源添加到可执行文件中:

$python -m PyInstaller --onefile --noconsole --icon=icon.ico --add-data "icon.ico;." main.py

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