しまぞうブログ

プログラミングと資産運用

右クリックメニューで.uiを.pyに変換する【PySide, PyQt】

以前にPyQtGUIを作成する手順について記事にしました。

shimazoh.hatenablog.com

この記事の中でQtDesignerというデザイナで生成される.uiファイルを.pyファイルに変換する手順について記載しました。

この手順、一行コマンドを打つだけなんですけど、私的には面倒だなと感じました。

そこで、ファイルを右クリックで選択して変換コマンドを実行できるようにしていきたいと思います。

作業環境

  • Windows10
  • Anaconda 4.10(scoopでインストール)
  • Python 3.8
  • PySide2

.uiを.pyに変換するbatファイルを作成する

変換コマンドで以下の処理を行うようにします。

  1. 仮想環境の呼び出し
  2. 対象ファイルを引数で受け取り
  3. .uiから.pyへの変換

順番に説明していきます。

仮想環境を呼び出す

まずはコマンドプロンプトを開いて、使用する仮想環境を呼び出します。
以下のコマンドを実行します。

call (ユーザ)\scoop\apps\anaconda3\current\Scripts\activate (環境名)

activateのパスが環境によって異なるので、適宜変更してください。

変換対象のファイルを引数で受け取る

%1とするとファイルのフルパスを受け取ることができるようです。複数のファイルをドラッグアンドドロップした場合、%1,%2,…となっていきます。

これを使って、batファイルにファイルのフルパスを受け取ります。

.uiから.pyへの変換

.uiから.pyへの変換は冒頭で紹介した以前の記事で紹介した通り、以下のコマンドを実行します。

(ユーザ)\scoop\persist\anaconda3\envs\(環境名)\Library\bin\pyside2-uic *.ui -o *.py

batファイル

以上を組み合わせることで、最終的にbatファイルはこんな感じになります。

@echo off

call (ユーザ)\scoop\apps\anaconda3\current\Scripts\activate (環境名)

rem for文内で変数を使うために遅延環境変数の展開を有効化しておく
setlocal enabledelayedexpansion

rem ドラッグ&ドロップされたファイルをforでまわす
for %%A in (%*) do (

    rem 拡張子が.uiだったら処理続行
    if "%%~xA"==".ui" (

        rem 変数OutpuFileにアウトプットしたいフルパスをセットする
        rem %%~dA = ドライブ名, %%~pA = パス, %%~nA = ファイル名
        set OutpuFile="%%~dA%%~pA%%~nA.py"

        rem %hoge%とすると中身がなくなるので遅延環境変数 !hoge! を使う
    (ユーザ)\scoop\persist\anaconda3\envs\(環境名)\Library\bin\pyside2-uic %%A -o !OutpuFile!

    ) 
)

複数のファイルがドラッグアンドドロップされた場合に対応できるように、for文でループしています。また、生成されるファイル名が元のファイル名と同じになるように、ちょっとした処理をしています。

右クリックメニューでbatファイルを実行する

ドラッグアンドドロップでbatを実行してもいいんですけど、batファイルを探しに行くのも面倒なので、右クリックメニューからbatを実行できるようにします。

以下のサイトを参考に右クリックメニューに登録します。

右クリックメニューに登録するとこんな感じになります。

試しに実行してみると、同フォルダに.pyファイルが生成されました。

参考サイト

仮想環境の呼び出し

pro-blo.com

batファイルの引数について

redglasses67.jimdofree.com