xml文件是否可以作为QT qrc资源文件的一部分

时间:2017-02-07 12:59:49

标签: opencv pyqt pyinstaller

我构建了一个PyQt应用程序来展示对象检测。检测器使用haar分类器进行训练,其分析符是cascade.xml文件。

我尝试使用pyinstaller打包此应用程序。但是,在此之前,我制作了一个我编译的resources.qrc文件。

<!DOCTYPE RCC><RCC version="1.0">
<qresource>
<file>cascade.xml</file>
</qresource>
</RCC>

我的问题是,当我使用此资源时,通过

:/cascade.xml

未读取文件。 我该怎么做才能解决这个问题。

1 个答案:

答案 0 :(得分:0)

首先需要使用pyrcc

从.qrc文件创建python模块
pyrcc5 resources.qrc -o resources.py

然后需要将pyrcc的输出导入到您的python代码

import resources

然后您应该可以通过':/cascade.xml'访问资源。在某些情况下,可能需要使用'qrc:/cascade.xml'

但是,资源路径仍然必须像磁盘上的文件一样对待。要访问其内容,您需要从资源中读取。以下是使用lxml

进行阅读和解析的示例
import lxml.etree as etree
from PyQt5 import QtCore

# Import the resource module create by pyrcc
import resources

# QFile knows how to read Qt resources
xml_file = QtCore.QFile(':/cascade.xml')

if xml_file.open(QtCore.QFile.ReadOnly):
    # Read the QFile and convert QByteArray output to python string
    xml_str = str(xml_file.readAll())

    # parse the xml document from string
    xml_tree = etree.ElementTree(etree.fromstring(xml_str))

    xml_file.close()