Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从resources\u rc.py还原resource.qrc文件_Python_Pyqt_Resources_Restore_Pyrcc - Fatal编程技术网

Python 如何从resources\u rc.py还原resource.qrc文件

Python 如何从resources\u rc.py还原resource.qrc文件,python,pyqt,resources,restore,pyrcc,Python,Pyqt,Resources,Restore,Pyrcc,由于我面临数据丢失,当我尝试恢复时,我有一个损坏的resource.qrc文件,并且我也丢失了图形文件(.png.jpg)-但是我的Qt应用程序运行良好 问题是当我需要编辑.ui文件时,我的资源.qrc文件已损坏。我的resources\u rc.py文件很好,我是通过以下命令创建的: pyrcc4-o resource.py resource.qrc 那么,我有没有办法从resources\u rc.py文件中获取我的resource.qrc呢?下面的脚本将从pyrcc生成的resource

由于我面临数据丢失,当我尝试恢复时,我有一个损坏的
resource.qrc
文件,并且我也丢失了图形文件(.png.jpg)-但是我的Qt应用程序运行良好

问题是当我需要编辑
.ui
文件时,我的
资源.qrc
文件已损坏。我的
resources\u rc.py
文件很好,我是通过以下命令创建的:

pyrcc4-o resource.py resource.qrc

那么,我有没有办法从
resources\u rc.py
文件中获取我的
resource.qrc
呢?

下面的脚本将从
pyrcc
生成的
resources\u rc.py
文件中重建一个qrc文件和所有原始资源。它将与PyQt4/5和Python2/3一起工作。这些文件将被写入与给定的
resources\u rc.py
文件相同的目录中的临时目录

用法:

python qrc\u gen.py路径/to/resources\u rc.py
qrc_gen.py:

导入系统、操作系统、临时文件 进口sip sip.setapi('QString',2) 从PyQt4导入QtCore #从PyQt5导入QtCore respath=os.path.abspath(sys.argv[1]) dirpath=os.path.dirname(respath) sys.path.insert(0,dirpath) 输入资源 tmpdir=tempfile.mkdtemp(prefix='qrc',dir=dirpath) it=QtCore.QDirIterator(“:”,QtCore.QDirIterator.Subdirectories) 文件=[] 而它。hasNext() uri=it.next() path=uri.lstrip(“:/”) 如果path.startswith('qt-project.org'): 持续 tmp=os.path.join(tmpdir,path) 如果是.fileInfo().isDir(): 尝试: os.makedirs(tmp) 除操作错误外: 通过 其他: res=QtCore.QFile(uri) res.open(QtCore.QIODevice.ReadOnly) 以open(tmp,“wb”)作为流: stream.write(字节(res.readAll()) 决议关闭() 文件。追加(“%s\n”%path.lstrip(“:/”) 以open(os.path.join(tmpdir,'resources.qrc'),'w')作为流: stream.write(“\n”) stream.write('\n%s\n'''''.join(文件))
了不起的人,除了这里,我在任何地方都找不到解决问题的方法。非常好的工作,非常感谢你再次帮助我,哈哈。@ekhumoa只是出于好奇,是否也可以从
app.py
文件还原
app.ui
文件?因为我在任何地方也找不到与此相关的任何东西@ekhumoro@Aadit. 很难恢复完整的原稿。文中给出了部分解。
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))