2017-12-31 231 views
1

データが失われているので、回復を試みたときに壊れたresource.qrcファイルがあります。また、グラフィックファイル(.png、.jpg)も失われました。アプリケーションはうまく動作しています。resource_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

関連する問題