当前位置:   article > 正文

PYQT 自带的 Pyrcc 系统的使用,PyInstaller对PYQT程序进行打包,不能打包背景图片,图标等解决办法

pyrcc

问题

使用 PyInstaller 对程序进行打包,不能打包背景图片。打包后的软件可以正常运行,但涉及到图片相关的资源(如背景图片,头像)全部不显示。

问题分析

当使用Python PyInstaller对程序进行打包时,如果程序中涉及到背景图片,会出现无法打包背景图片的问题。这是由于PyInstaller默认只会将代码和依赖的库文件打包进可执行文件中,而不会将文件资源如图片等打包进去。因此,这些文件在程序运行时无法被找到,导致程序无法正常显示背景图片。

解决办法步骤

利用 PYQT 自带的 Pyrcc 系统,将图片转化为QT能调用的资源文件,然后在源代码中调用图片资源。

1.在项目中新建 image.qrc 文件。写入以下代码

<RCC>
  <qresource prefix="IMAGES">
    <file alias="icon">./icon.jpg</file>
  </qresource>
</RCC>
  • 1
  • 2
  • 3
  • 4
  • 5

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资源文件
  • 1

调用资源图片,就将如下原代码

# 设置控件背景
self.label.setStyleSheet("border-image:url(./icon.jpg);") 
  • 1
  • 2

修改为

self.label.setStyleSheet("border-image: url(:IMAGES/icon);")
  • 1

IMAGES 对应 image.qrc文件里代码内容,IMAGES 是前缀值,icon是alias值
其他使用方式:

self.label_user_icon.setPixmap(QtGui.QPixmap(":IMAGES/icon"))
  • 1

这个时候再去打包软件,就可以将图片资源一起打包带走了。

  1. 每次修改 image.qrc 文件,选择 PYQT:Compile Resource 前,一定要先保存再编译成图片资源
  2. image.qrc语法格式很挑剔,仔细查看空格
  3. 我们使用 image_rc.py 资源文件时,在Qt-designer中不显示图片,这是正常的。不如直接运行代码,图片资源加载其实是成功的,只是Qt-designer中看不到。
  4. PYQT6 没有 Pyrcc 资源系统,也许可以用 PYQT5 转好的资源文件,让PYQT6 去调用,自己去试吧!
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/76150
推荐阅读
  

闽ICP备14008679号