ui2pyclass.py PySideの.uiをクラス化して継承する Maya PySide

python,qt,PySide,PySide2

PySideの.uiファイルを使用するときにQUiLoaderを使わず、.uiをPythonに変換せずpythonのクラスとして継承して使用したいと思ったことはないでしょうか?
そんな時はloadUiTypeを使えばいいのですが一部のMayaだとloadUiTypeのimportErrorが・・・
self.hogeui.hogewidget.clicked.connect(hoge)のように長ったらしくなる

そんな時に便利なものを作りました!! その名もui2pyclass!!!

名前のそのまんまでuiからpython classにするいう感じで使用できます

※ui2pyclassはelementtree-xpathを使用しているのでpip install lxmlなどでxmlを使用できるようにする必要がありますのでご注意ください

使い方は至ってシンプルでuiのpathとuiのメインオブジェクトのオブジェクト名を指定して
継承したいclassにui2pyclass.baseClassとui2pyclass.formClassを指定し、継承先の__init__でself.setupUi(self)を実行すれば使用できます

import os
from PySide2.QtWidgets import *
from ui2pyclass import *

absPath = os.path.dirname(__file__)
uiPath = os.path.join(absPath, "view.ui")

ui = ui2pyclass(ui=uiPath, objectName="ui2pyclass")
class uiWidget(ui.baseClass, ui.formClass):
    def __init__(self, parent=None, *args, **kwargs):
        super(uiWidget, self).__init__(parent, *args, **kwargs)
        self.setupUi(self)

def main():
    app = QApplication.instance()
    ex = uiWidget()
    ex.show()
    sys.exit()
    app.exec_()

main()

uiのメインオブジェクトのオブジェクト名はObject Inspectorで確認できます
特に設定していない場合がFormになっていると思いますが設定している場合は変更してください
20211115_01

参考
https://doc-snapshots.qt.io/qtforpython-5.15/PySide2/QtUiTools/ls.loadUiType.html