Qt for Python アプリケーションで Designer UI ファイルを使用する

フォームを Python コードに変換する

デモンストレーションとして、Qt Widgets アニメーションイージングの例を使用します。

アプリケーションは1つのソースファイルeasing.py 、UI ファイルform.ui 、リソースファイルeasing.qrc 、プロジェクトファイルeasing.pyproject の YAML フォーマットで構成されます:

{
    "files": ["easing.qrc", "ui_form.py", "easing.py", "easing_rc.py",
              "form.ui"]
}

UI ファイルはUser Interface Compiler (uic) を使ってフォームを構築する Python コードに変換されます:

uic -g python form.ui > ui_form.py

トップレベルのウィジェットはForm という名前なので、Ui_Form という Python クラスが生成されます。このクラスは、ウィジェットをパラメータとする関数setupUi() を提供し、UI 要素を作成するために呼び出されます:

from ui_form import Ui_Form
...
class Window(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(Window, self).__init__(parent)

        self.m_ui = Ui_Form()
        self.m_ui.setupUi(self)

後で、ウィジェットはUi_Form クラス経由でアクセスできる:

self.m_ui.graphicsView.setScene(self.m_scene)

setupUi() 以外に、Ui_Form は、retranslateUi() メソッドを提供する。これは、QEvent.LanguageChangeタイプのQEvent に反応して呼び出され、アプリケーション言語の変更を示す。

UiToolsのアプローチ

QUiLoader 、実行時にユーザー・インターフェースを構築するフォーム・ローダー・オブジェクトを提供する。このユーザー・インターフェースは、任意のQIODevice 、例えばQFile オブジェクトから取得することができる。QUiLoader::load ()関数は、ファイルに含まれるユーザー・インターフェース記述を使用してフォーム・ウィジェットを構築します。

これは uiloader の例で示されています:

from PySide2.QtUiTools import QUiLoader

if __name__ == '__main__':
    # Some code to obtain the form file name, ui_file_name
    app = QApplication(sys.argv)
    ui_file = QFile(ui_file_name)
    if not ui_file.open(QIODevice.ReadOnly):
        print("Cannot open {}: {}".format(ui_file_name, ui_file.errorString()))
        sys.exit(-1)
    loader = QUiLoader()
    widget = loader.load(ui_file, None)
    ui_file.close()
    if not widget:
        print(loader.errorString())
        sys.exit(-1)
    widget.show()
    sys.exit(app.exec_())

リソースのインポート

単一ディレクトリでの使用

リソースファイルからアイコンを使用する場合、例えばresources.qrcuic はフォームのインポートを生成します:

import resources_rc

これは、Resource Compiler (rcc)ツールを呼び出して生成されたファイルresources_rc.py (-g python コマンドラインオプションを渡す) が、フォームソースと同じディレクトリに存在することを前提としています。

uic コマンドラインオプション を指定すると、 インジケータが付加されます:--rc-prefix rc

import rc_resources

コマンドラインオプション--from-imports を指定すると、インポートが '.' からの相対パスで生成されます:

from . import resources_rc

ディレクトリツリー

プロジェクトによっては、より複雑なディレクトリツリーを持つものもあります:

project
    resources   (resources.qrc)
    ui          (.ui files)

その場合、リソース・ファイルはフォーム・ソースと同じディレクトリにはなく、.ui ファイルは通常リソース・ファイルへの相対パスを持ちます:

<include location="../resources/resources.qrc"/>

この場合、コマンドラインオプション--absolute-imports を使用すると、Pythonで絶対インポートを生成することができます:

import resources.resources_rc

この場合、コマンドラインオプション. を使用すると、Pythonの絶対インポートを生成することができます。

より深くネストしたツリーの場合、コマンドラインオプション--python-paths <path list> を使って Python のインポートパスリストを渡すことができます。uic は、フォームファイルのパスとパスの構成要素を照合して、プロジェクトのルートを決定しようとします。

--python-paths が指定されない場合、環境変数PYTHONPATH がデフォルトでチェックされます。

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.