Verwendung einer Designer UI-Datei in Ihrer Qt for Python Anwendung
Umwandlung des Formulars in Python-Code
Zur Veranschaulichung verwenden wir das Qt Widgets Beispiel für Animationserleichterungen.
Die Anwendung besteht aus einer Quelldatei, easing.py
, einer UI-Datei form.ui
, einer Ressourcendatei easing.qrc
und der Projektdatei, easing.pyproject
im YAML-Format:
{ "files": ["easing.qrc", "ui_form.py", "easing.py", "easing_rc.py", "form.ui"] }
Die UI-Datei wird in Python-Code umgewandelt, der das Formular unter Verwendung von User Interface Compiler (uic) erstellt:
uic -g python form.ui > ui_form.py
Da das Top-Level-Widget Form
heißt, wird eine Python-Klasse namens Ui_Form
erzeugt. Sie stellt eine Funktion setupUi()
bereit, die das Widget als Parameter annimmt und aufgerufen wird, um die UI-Elemente zu erstellen:
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)
Später kann auf die Widgets über die Klasse Ui_Form
zugegriffen werden:
self.m_ui.graphicsView.setScene(self.m_scene)
Neben setupUi()
stellt Ui_Form
eine weitere Methode retranslateUi()
bereit, die als Reaktion auf eine QEvent vom Typ QEvent.LanguageChange aufgerufen werden kann, die eine Änderung der Anwendungssprache anzeigt.
Der UiTools-Ansatz
Die Klasse QUiLoader stellt ein Formloader-Objekt zur Verfügung, um die Benutzeroberfläche zur Laufzeit zu konstruieren. Diese Benutzeroberfläche kann von jedem QIODevice, z.B. einem QFile Objekt, abgerufen werden. Die Funktion QUiLoader::load() konstruiert das Formular-Widget anhand der in der Datei enthaltenen Beschreibung der Benutzeroberfläche.
Sie wird anhand des uiloader-Beispiels demonstriert:
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_())
Ressourcenimporte
Verwendung eines einzelnen Verzeichnisses
Bei der Verwendung von Symbolen aus Ressourcendateien, z. B. resources.qrc
, wird uic
einen Import des Formulars erzeugen:
import resources_rc
Dies setzt voraus, dass eine Datei resources_rc.py
, die durch den Aufruf des Werkzeugs Resource Compiler (rcc) (mit der Kommandozeilenoption -g python
) erzeugt wurde, im selben Verzeichnis wie die Formularquelle existiert.
uic
hat eine Kommandozeilenoption --rc-prefix
, die bewirkt, dass das Kennzeichen rc
vorangestellt wird:
import rc_resources
Die Befehlszeilenoption --from-imports
bewirkt, dass die Importe relativ zu '.' erzeugt werden:
from . import resources_rc
Verzeichnisbäume
Manche Projekte haben z.B. kompliziertere Verzeichnisbäume:
project resources (resources.qrc) ui (.ui files)
Die Ressourcendatei befindet sich dann nicht im selben Verzeichnis wie der Formularquelltext und die .ui
Dateien haben normalerweise relative Pfade zu den Ressourcendateien:
<include location="../resources/resources.qrc"/>
In diesem Fall kann die Kommandozeilenoption --absolute-imports
verwendet werden, um einen absoluten Import in Python zu erzeugen, was zu
import resources.resources_rc
basierend auf der Annahme, dass .
. das Stammverzeichnis des in der Python-Importpfadliste enthaltenen Projekts ist.
Bei tiefer verschachtelten Bäumen ist es möglich, die Befehlszeilenoption --python-paths <path list>
zu verwenden, um eine Python-Importpfadliste zu übergeben. uic
wird dann versuchen, das Stammverzeichnis des Projekts zu bestimmen, indem es den Pfad der Formulardatei mit den Pfadkomponenten vergleicht.
Wenn --python-paths
nicht angegeben wird, wird standardmäßig die Umgebungsvariable PYTHONPATH
überprüft.
© 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.