在 raspbian(Raspberry Pi OS)中找不到 PyQt 应用程序 rcc 转换的图像

Posted

技术标签:

【中文标题】在 raspbian(Raspberry Pi OS)中找不到 PyQt 应用程序 rcc 转换的图像【英文标题】:PyQt application rcc converted image not found in raspbian (Raspberry Pi OS) 【发布时间】:2021-01-18 14:27:02 【问题描述】:

我正在开发一个在 Windows 和 Linux 上运行的跨平台应用程序(在我的例子中是 Raspbian)。我已使用 C:\Python37\Scripts\pyside2-rcc.exe tests.qrc -o tests_rc.py 将所有图像转换为单个文件。我的tests.qrc 文件结构是这样的:

<RCC>
  <qresource prefix="images">
    <file>images/Slider_1m.png</file>
    <file>images/Slider_2m.png</file>
    <file>images/Slider_3m.png</file>
  </qresource>
</RCC>

在主脚本中转换为tests_rc.py 后编码如下:

self.SLIDER.setText(QCoreApplication.translate("SLIDER",u"<html><head/><body><p align=\"center\"><img src=':/images/images/Slider_1m.png'/></p></body></html>", None))

在 Windows 应用程序中完美加载不再需要原始图像文件。 但是在 raspbian 中,这种图像不会加载,我必须像这样定义位置:

self.SLIDER.setText(QCoreApplication.translate("SLIDER",u"<html><head/><body><p align=\"center\"><img src='/home/pi/Myproject/ui/images/Slider_1m.png'/></p></body></html>", None))

如您所见,我设置了确切的图像位置。这是我发现在 raspbian 应用程序中查看的方式,而我的 tests_rc.py 文件完全没用。在raspbian中和windows一样使用tests_rc.py文件应该怎么做?

【问题讨论】:

其他资源文件能用吗?您是否完全确定您在两个操作系统中使用了相同的资源文件并且您正确地导入了它? 我有 3 个像这样的各种资源文件,并且在 Windows 中都可以正常工作,我检查文件并替换了 100 多次,我正在 Windows 中编写代码并转移到 Rasp @MohammadFarahi 请提供minimal reproducible example 【参考方案1】:

我有mainicons.qrc 文件包含:

<RCC>
  <qresource prefix="images">
    <file>images/calibration_.png</file>
    <file>images/media_.png</file>
    <file>images/menu_.png</file>
    <file>images/upgrade_.png</file>
  </qresource>
</RCC>

转换为mainicons_rc.py文件,然后导入到这个简单的例子中:

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel
from PyQt5.QtCore import QCoreApplication

import mainicons_rc

def window():
   app = QApplication(sys.argv)
   widget = QWidget()
   textLabel = QLabel(widget)
   textLabel.setText(QCoreApplication.translate("TestInitWindow", u"<html><head/><body><p><img src=\":/images/images/calibration_.png\"/></p></body></html>", None))

   widget.setGeometry(50,50,300,300)
   widget.setWindowTitle("PyQt5 Example")
   widget.show()
   sys.exit(app.exec_())

if __name__ == '__main__':
   window()

问题是:以前我使用C:\Python37\Scripts\pyside2-rcc.exe mainicons.qrc -o mainicons_rc.py将它转换为rcc资源文件。 将pyside-rcc.exe 更改为pyrcc5.exe 解决了这个问题,现在转换命令应该是:C:\Python37\Scripts\pyrcc5.exe mainicons.qrc -o mainicons_rc.py。 我检查了两个生成文件完全不同。

【讨论】:

将 PyQt 和 PySide 混合在一起被认为是的做法。我们本可以更彻底(您实际上“告诉”我们,因为标签和标题指定了 PyQt,而您写道您使用了 pyside 的工具)所以这也是我们的责任,但以后要更加小心。 是的,我的错。我不得不添加 Pyside 标签,但在我遇到问题之前,我认为这两者之间可能没有什么不同。以前我在 PySide 中遇到过与 pysignal 相同的问题,但在 PyQt 中没问题。 如果你需要同时兼容 PyQt PySide,我建议使用Qt.py,它允许透明地使用两个模块,但是这个不允许您直接使用为资源生成的文件;我从未将它与 pyside 一起使用,因此我不确定它们是否完全兼容,但您可以 try 仅更改生成的 _rc 文件顶部的导入语句并查看它是否有效如果您也可以使用 Qt.py,只需相应地更改导入(您显然需要记住在内容更改时更新文件)。 还要注意,从 PyQt6 开始,pyrcc 已被删除,因为维护者决定不再需要它(我们中的一些人不同意他的动机,但仅此而已);尽管如此,pyside 似乎暂时保持他们的工具可用。

以上是关于在 raspbian(Raspberry Pi OS)中找不到 PyQt 应用程序 rcc 转换的图像的主要内容,如果未能解决你的问题,请参考以下文章