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.