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))