问题
使用 PyInstaller 对程序进行打包,不能打包背景图片。打包后的软件可以正常运行,但涉及到图片相关的资源全部不显示。
问题分析
当使用Python PyInstaller对程序进行打包时,如果程序中涉及到背景图片,会出现无法打包背景图片的问题。这是由于PyInstaller默认只会将代
码和依赖的库文件打包进可执行文件中,而不会将文件资源如图片等打包进去。因此,这些文件在程序运行时无法被找到,导致程序无法正常显示背景图
片。
解决办法步骤
利用 PYQT 自带的 Pyrcc 系统,将图片转化为QT能调用的资源文件,然后再源代码中调用。
1.在项目中新建 image.qrc 文件。写入以下代码
<RCC>
<qresource prefix="IMAGES">
<file alias="icon">./icon.jpg</file>
</qresource>
</RCC>
2.保存后,利用 PYQT 自带的 Pyrcc 系统,转化为资源文件。
Vscode中的操作是,右击image.qrc 文件,选择 PYQT:Compile Resource
对这个方式有疑问的可以看这篇博客:
Pyrcc 环境验证
点击 PYQT:Compile Resource后,可以看到新生成的 image_rc.py 文件。
3.引用资源文件
有了新生成的 image_rc.py 文件,我们再将image_rc.py文件引用,再UI.py文件中做出下面修改
import image_rc # 引用image_rc.py资源文件
将原代码
# 设置控件背景
self.label.setStyleSheet("border-image:url(./icon.jpg);")
修改为
self.label.setStyleSheet("border-image: url(:IMAGES/icon);")
对应 image.qrc文件内容,这里的 IMAGES 是前缀值,icon是alias值
其他使用方式:
self.label_user_icon.setPixmap(QtGui.QPixmap(":IMAGES/icon"))
这个时候再去打包软件,就可以将图片资源一起打包带走了。
坑
- 每次修改 image.qrc 文件,选择 PYQT:Compile Resource 前,一定要先保存再编译成图片资源
- image.qrc语法格式很挑剔,仔细查看空格
- 我们使用rcc资源文件时,在Qt-designer中不显示图片,这是正常的。不如直接运行代码,图片资源加载其实是成功的,只是Qt-designer中看不到。
- PYQT6 没有 Pyrcc 资源系统,也许可以用 PYQT5 转好的资源文件,让PYQT6 去调用,自己去试吧!