PySideで使うQRCを便利作る!




自分のツールで使っている画像をPySideで読み込もうと思うと、、、

:/」から初めて楽したいのにできないし、フルパスで書くとコード長くなるし、、、ツールの位置を変えたら修正しなきゃだし、「__file__」を使ってやろうとしてもコードが長くなるし、煩雑になるし、読みにくいし、、、、

面倒くさい(ヽ´ω`)

じゃー!QRC使えばいいじゃん!っとなりますが、、、通常、Designerのリソースブラウザで画像を読み込んで、QRCを保存して、コマンドラインでQRCをpyに変換する、、、って流れになると思います。だけど、、、

ダル(ヽ´ω`)

更に、ツールを作っている時は、画像が追加されたり、画像を修正したりすると思います。その度に、QRCを更新してpyに変換しなおさなきゃいけません。それが、1回や2回なんてもんでないと思います。

とっても
面倒くさい
v(*´ω`*)v

そこで、なんとか手順が最小限で済む方法を模索してみました。

まず、 QRCをNotepad++で見てみると、ファイルの場所をXML形式で書いただけのファイルだとわかりました。

っということは、フォルダの中にある画像を調べて、XML形式で書いたQRCを作って、そのままpyに変換してしまえば、、、

ツール実行するだけ
OKじゃん!
(゚∀゚)

まず以下のpyファイルを作成しました。これは、指定されたディレクトリにあるPNG画像を最下層まで調べてQRCファイルを作るコードです。単純なXMLなので、DOMなどは使用しませんでした(;・∀・)どこのディレクトリを調べるか、batchから引数で指定できるようにしてあります。

# -*- coding:utf-8 -*-
import sys
import os
 
PREFIX='/myTool/'
 
def searchFile(root, result):
    for file in os.listdir(root):
        fullpath = os.path.join(root, file)
         
        if os.path.isdir(fullpath):
            searchFile(fullpath, result)
         
        if file.split('.')[-1] == 'png':
            result.append(fullpath)
    return result
     
def main():
    root = sys.argv[1]
    files = searchFile(root, [])
     
    qrc = os.path.join(root, 'resource.qrc')
    fw = open(qrc, 'w')
    fw.write('<RCC>\n')
    fw.write('  <qresource prefix="%s">\n' % PREFIX)
    for file in files: 
        file = file.replace(root, './')
        fw.write('    <file>%s</file>\n' % file)
    fw.write('  </qresource>\n')        
    fw.write('</RCC>\n')
     
 
if __name__ == '__main__':
    main()

PREFIX=’/myTool/’」の部分は、お好みで修正してください。このままだと、「:/myTool/画像名」で読み込める状態になります。ただし!「PREFIX=’/’」にすると、Mayaのリソースイメージと同じく「:/画像名」で読み込めますが、「Mayaと名前が重複すると負けてしまう」ので注意が必要です。

次は、実行用のバッチファイルです。このバッチをダブルクリックすれば、上記のツールを実行しQRCを作って、pyファイルに変換してくれます(`・ω・´)ゞ

@echo off
chcp 65001
 
set py=.\resource.py
 
:: Create QRC
echo Create QRC
"C:\Python27\python.exe" .\createQRC.py ./
 
:: Convert QRC to PY
echo Convert QRC to PY
"C:\Python27\Lib\site-packages\PySide\pyside-rcc.exe" -o %py% .\resource.qrc

echo "Done!"
pause

「set py=.\resource.py」の部分はお好みで変更してください。後々、ツールから読み込むので、ツールがあるディレクトリに変更されることをオススメします。

上記のコードを、画像のディレクトリと同じ場所に保存します。

では早速、実行してみます!!(`・ω・´)ゞ

このツールを実行するには、Python2.7とPySideのインストールが必要です。まだの方は以下の記事をご覧ください!
WindowsにPython2.7とPySideをインストールする!

自分のツールで使う場合は、出来上がった「resource.py」を読み込んであげます!

import resource

これなら、最小限の作業量で、QRC作成、PYに変換ができると思います!(`・ω・´)ゞ