问题
使用 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。
点击 PYQT:Compile Resource后,可以看到新生成的 image_rc.py 文件。
对这个方式有疑问的可以看这篇博客:
Pyrcc 环境配置验证
3.引用资源文件
有了新生成的 image_rc.py 文件,我们再将image_rc.py文件引用,再UI.py文件中调用资源文件。这里 image_rc 是我的资源文件 image_rc.py 的包名字。
import image_rc # 引用image_rc.py资源文件
调用资源图片,就将如下原代码
# 设置控件背景
self.label.setStyleSheet("border-image:url(./icon.jpg);")
修改为
self.label.setStyleSheet("border-image: url(:IMAGES/icon);")
IMAGES 对应 image.qrc文件里代码内容,IMAGES 是前缀值,icon是alias值
其他使用方式:文章来源:https://www.toymoban.com/news/detail-766396.html
self.label_user_icon.setPixmap(QtGui.QPixmap(":IMAGES/icon"))
这个时候再去打包软件,就可以将图片资源一起打包带走了。文章来源地址https://www.toymoban.com/news/detail-766396.html
坑
- 每次修改 image.qrc 文件,选择 PYQT:Compile Resource 前,一定要先保存再编译成图片资源
- image.qrc语法格式很挑剔,仔细查看空格
- 我们使用 image_rc.py 资源文件时,在Qt-designer中不显示图片,这是正常的。不如直接运行代码,图片资源加载其实是成功的,只是Qt-designer中看不到。
- PYQT6 没有 Pyrcc 资源系统,也许可以用 PYQT5 转好的资源文件,让PYQT6 去调用,自己去试吧!
到了这里,关于PYQT 自带的 Pyrcc 系统的使用,PyInstaller对PYQT程序进行打包,不能打包背景图片,图标等解决办法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!