如何从 resources_rc.py 恢复 resource.qrc 文件
How to restore resource.qrc file from resources_rc.py
由于我面临数据丢失,当我尝试恢复它时,我有一个损坏的 resource.qrc
文件,我也丢失了我的图形文件(.png、.jpg)——但我的 Qt 应用程序是 运行 很好。
问题是当我需要编辑 .ui
文件时,我有一个损坏的 resource.qrc
文件。我的 resources_rc.py
文件一切正常,我是通过以下命令创建的:
pyrcc4 -o resource.py resource.qrc
那么有什么办法可以从 resources_rc.py
文件中取回我的 resource.qrc
吗?
下面的脚本将从 pyrcc
生成的 resources_rc.py
文件重建一个 qrc 文件和所有原始资源。它适用于 PyQt4/5 和 Python 2/3。这些文件将写入与给定 resources_rc.py
文件相同目录中的临时目录。
用法:
python qrc_gen.py path/to/resources_rc.py
qrc_gen.py:
import sys, os, tempfile
import sip
sip.setapi('QString', 2)
from PyQt4 import QtCore
# from PyQt5 import QtCore
respath = os.path.abspath(sys.argv[1])
dirpath = os.path.dirname(respath)
sys.path.insert(0, dirpath)
import resources_rc
tmpdir = tempfile.mkdtemp(prefix='qrc_', dir=dirpath)
it = QtCore.QDirIterator(':', QtCore.QDirIterator.Subdirectories)
files = []
while it.hasNext():
uri = it.next()
path = uri.lstrip(':/')
if path.startswith('qt-project.org'):
continue
tmp = os.path.join(tmpdir, path)
if it.fileInfo().isDir():
try:
os.makedirs(tmp)
except OSError:
pass
else:
res = QtCore.QFile(uri)
res.open(QtCore.QIODevice.ReadOnly)
with open(tmp, 'wb') as stream:
stream.write(bytes(res.readAll()))
res.close()
files.append(' <file>%s</file>\n' % path.lstrip(':/'))
with open(os.path.join(tmpdir, 'resources.qrc'), 'w') as stream:
stream.write('<!DOCTYPE RCC><RCC version="1.0">\n')
stream.write('<qresource>\n%s</qresource>\n' % ''.join(files))
由于我面临数据丢失,当我尝试恢复它时,我有一个损坏的 resource.qrc
文件,我也丢失了我的图形文件(.png、.jpg)——但我的 Qt 应用程序是 运行 很好。
问题是当我需要编辑 .ui
文件时,我有一个损坏的 resource.qrc
文件。我的 resources_rc.py
文件一切正常,我是通过以下命令创建的:
pyrcc4 -o resource.py resource.qrc
那么有什么办法可以从 resources_rc.py
文件中取回我的 resource.qrc
吗?
下面的脚本将从 pyrcc
生成的 resources_rc.py
文件重建一个 qrc 文件和所有原始资源。它适用于 PyQt4/5 和 Python 2/3。这些文件将写入与给定 resources_rc.py
文件相同目录中的临时目录。
用法:
python qrc_gen.py path/to/resources_rc.py
qrc_gen.py:
import sys, os, tempfile
import sip
sip.setapi('QString', 2)
from PyQt4 import QtCore
# from PyQt5 import QtCore
respath = os.path.abspath(sys.argv[1])
dirpath = os.path.dirname(respath)
sys.path.insert(0, dirpath)
import resources_rc
tmpdir = tempfile.mkdtemp(prefix='qrc_', dir=dirpath)
it = QtCore.QDirIterator(':', QtCore.QDirIterator.Subdirectories)
files = []
while it.hasNext():
uri = it.next()
path = uri.lstrip(':/')
if path.startswith('qt-project.org'):
continue
tmp = os.path.join(tmpdir, path)
if it.fileInfo().isDir():
try:
os.makedirs(tmp)
except OSError:
pass
else:
res = QtCore.QFile(uri)
res.open(QtCore.QIODevice.ReadOnly)
with open(tmp, 'wb') as stream:
stream.write(bytes(res.readAll()))
res.close()
files.append(' <file>%s</file>\n' % path.lstrip(':/'))
with open(os.path.join(tmpdir, 'resources.qrc'), 'w') as stream:
stream.write('<!DOCTYPE RCC><RCC version="1.0">\n')
stream.write('<qresource>\n%s</qresource>\n' % ''.join(files))