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

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

デモンストレーションのために、Qt Widgets animation easing の例を使います。

このアプリケーションは、ソースファイル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() という Python クラスが生成されます。このクラスは という関数を提供し、ウィジェットをパラメータとして、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)ツールを呼び出して (-g python コマンドラインオプションを渡して) 生成されたファイルresources_rc.py が、フォームソースと同じディレクトリに存在することを前提としています。

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 がデフォルトでチェックされます。

©2024 The Qt Company Ltd. ここに含まれるドキュメントの著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。