Python PyInstaller 并包含窗口图标

问题描述 投票:0回答:3

我已经使用

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
图标,因为它是透明的。

python pyqt icons pyinstaller
3个回答
5
投票

在 Windows 上运行可执行文件时显示的图标来自可执行文件本身。要将图标与您的应用程序捆绑在一起,您需要在使用

pyinstaller.exe
构建时通过传递
--icon
参数来指定图标。例如:

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

请注意,与

setWindowIcon()
不同,图标文件必须采用
.ico
格式,因此您需要先将其从
.png
转换。

如果您想使用 PyQt 调用来设置图标,您需要将图标文件捆绑到可执行文件中,这可以使用 PyInstaller spec 文件 来完成。创建和修改规范文件的过程的演练位于之前的答案


1
投票

我通过以下方式解决问题

我在代码中调用资源:

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

0
投票

要同时兼容

.py
.exe
,您可以执行以下操作:

if getattr(sys, 'frozen', False):
    applicationPath = sys._MEIPASS
elif __file__:
    applicationPath = os.path.dirname(__file__)
app = QApplication(sys.argv)
app.setWindowIcon(QtGui.QIcon(os.path.join(applicationPath, "Icon.ico")))

对于您的 pyinstaller 调用:

pyinstaller --icon=Icon.ico --add-data="Icon.ico;." "main.py"
© www.soinside.com 2019 - 2024. All rights reserved.