在Python中从资源加载txt文件

2 投票
2 回答
1694 浏览
提问于 2025-04-17 15:05

我有一个.qrc文件:

<RCC>
  <qresource prefix="/files">
    <file alias='icon'>../icons/Delta.jpg</file>
    <file alias='eng'>../Languages/English.txt</file>
  </qresource>
</RCC>

我用pyrcc4把它编译成一个Python的python_rc.py文件。在我的代码里,我有:

import QtGui, python_rc
...
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(':/files/icon'), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.setWindowIcon(icon)
...
text = codecs.open(':/files/eng', 'r', "utf-8")

...图标加载得没问题,但对于文本文件,我遇到了:

IOError: [Errno 22] invalid mode ('rb') or filename: ':/files/eng'

所以我想问的是:我应该怎么从python_rc里加载文本文件?文本文件可以加载吗,还是只能加载图片?

2 个回答

4

你可以试试这个:

fd = QtCore.QFile(":/files/eng")
if fd.open(QtCore.QIODevice.ReadOnly | QtCore.QFile.Text):
    text = QtCore.QTextStream(fd).readAll()
    fd.close()

因为这个txt文件是在Qt资源文件里,所以你不能使用这个:

text = codecs.open(':/files/eng', 'r', "utf-8")
2

出于某种原因,这段代码可以正常工作,并且没有我在zoumi的回答中提到的问题:

path = ":/languages/eng"
f = QtCore.QFile(path)
if f.open(QtCore.QIODevice.ReadOnly | QtCore.QFile.Text):
    text = QtCore.QTextStream(f)
while not text.atEnd():
    line = unicode(QtCore.QString(text.readLine()))
    #do something with "line" here
f.close()

撰写回答