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.qrc
、uic
はフォームのインポートを生成します:
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.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。