2017-12-31 286 views
1

복구 할 때 데이터가 손상되면 resource.qrc 파일이 손상되고 그래픽 파일 (.png, .jpg)도 손실됩니다.하지만 내 Qt 응용 프로그램이 잘 실행되고 있습니다.resources_rc.py에서 resource.qrc 파일을 복원하는 방법

문제는 .ui 개의 파일을 편집해야 할 때 손상된 resource.qrc 파일이있는 것입니다.

pyrcc4 -o resource.py resource.qrc 

그래서 난 내 resource.qrc 다시 resources_rc.py 파일에서 얻을 수있는 방법이있다 : 내 resources_rc.py 파일 나는 다음과 같은 명령으로 만든, 잘입니까?

답변

1

아래 스크립트는 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)) 
+0

놀라운 사람이, 난 아무데도하지만 여기 내 문제에 대한 해결책을 찾을 수 없습니다. 멋진 작품과 LOL 다시 나를 도와 주셔서 고맙습니다. @ekhumoro – Aadit

+0

호기심 때문에'app.ui' 파일도'app.py' 파일에서 복원 할 수 있습니까? @echumoro – Aadit

+1

@Aadit과 관련이있는 곳을 찾을 수 없기 때문에. 전체 원본을 복원하는 것은 어렵습니다. 부분적인 해결책은 [이 답변] (https://stackoverflow.com/a/27135298/984421)에 나와 있습니다. – ekhumoro