Как восстановить файл resource.qrc из resources_rc.py

Поскольку я сталкиваюсь с потерей данных, у меня поврежден resource.qrc файл, когда я попытался восстановить его, и я также потерял свои графические файлы (.png, .jpg) - но мое приложение Qt работает нормально.

Проблема в том, когда мне нужно отредактировать .ui файлы у меня повреждены resource.qrc файл. мой resources_rc.py файл все хорошо, который я создал с помощью следующей команды:

pyrcc4 -o resource.py resource.qrc

Так есть ли способ получить мой resource.qrc обратно из resources_rc.py файл?

1 ответ

Решение

Сценарий ниже восстановит файл qrc и все исходные ресурсы из resources_rc.py файл, созданный pyrcc, Он будет работать с 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))
Другие вопросы по тегам