Auf dieser Seite

Verwendung einer UI-Datei des „ Qt Widgets “-Designers in Ihrer „ Qt for Python “-Anwendung

Konvertieren des Formulars in Python-Code

Zur Veranschaulichung verwenden wir das Beispiel für Animationsüberblendungen aus „ Qt Widgets “.

Die Anwendung besteht aus einer Quelldatei, „ easing.py “, einer UI-Datei, „ form.ui “, und der Projektdatei „ pyproject.toml “ im TOML-Format:

[project]
name = "Easing Example"

[tool.pyside6-project]
files = ["easing.py", "form.ui"]

Die UI-Datei wird in Python-Code konvertiert, der das Formular unter Verwendung von „User Interface Compiler “ (uic) erstellt:

uic -g python form.ui > ui_form.py

Da das Widget der obersten Ebene den Namen „ Form “ trägt, wird daraus eine Python-Klasse namens „ Ui_Form “ generiert. Diese stellt eine Funktion „ setupUi() “ bereit, die das Widget als Parameter entgegennimmt und zum Erstellen der UI-Elemente aufgerufen wird:

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 über die Klasse „ Ui_Form “ auf die Widgets zugegriffen werden:

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

Neben „ setupUi() “ bietet „ Ui_Form “ eine weitere Methode namens „ retranslateUi() “, die als Reaktion auf ein „ QEvent “ vom Typ „ QEvent.LanguageChange“ aufgerufen werden kann, das eine Änderung der Anwendungssprache anzeigt.

Der UiTools-Ansatz

Die Klasse „ QUiLoader “ stellt ein Formular-Ladeobjekt bereit, um die Benutzeroberfläche zur Laufzeit aufzubauen. Diese Benutzeroberfläche kann von jedem „ QIODevice “ abgerufen werden, z. B. von einem „ QFile “-Objekt. Die Funktion „ QUiLoader::load()“ baut das Formular-Widget anhand der in der Datei enthaltenen Beschreibung der Benutzeroberfläche auf.

Dies wird anhand des Beispiels „uiloader“ veranschaulicht:

from PySide6.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.OpenModeFlag.ReadOnly):
        print(f"Cannot open {ui_file_name}: {ui_file.errorString()}")
        sys.exit(-1)
    loader = QUiLoader()
    widget = loader.load(ui_file, None)
    ui_file.close()
    if widget is None:
        print(loader.errorString())
        sys.exit(-1)
    widget.show()
    sys.exit(app.exec())

Import von Ressourcen

Verwendung eines einzelnen Verzeichnisses

Bei der Verwendung von Symbolen aus Ressourcendateien, z. B. „ resources.qrc “, generiert „ uic “ einen Import der folgenden Form:

import resources_rc

Dies setzt voraus, dass eine Datei „ resources_rc.py “, die durch Aufruf des Tools „Resource Compiler “ (rcc) (unter Angabe der Befehlszeilenoption „ -g python “) generiert wurde, im selben Verzeichnis wie die Formularquelle vorhanden ist.

uic verfügt über die Befehlszeilenoption „ --rc-prefix “, wodurch der Indikator „ rc “ vorangestellt wird:

import rc_resources

Die Befehlszeilenoption „ --from-imports “ bewirkt, dass die Importe relativ zu „.“ generiert werden:

from . import resources_rc

Verzeichnisstrukturen

Manche Projekte weisen komplexere Verzeichnisstrukturen auf, zum Beispiel:

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

Die Ressourcendatei befindet sich dann nicht im selben Verzeichnis wie die Formularquelle, und die „ .ui “-Dateien enthalten in der Regel relative Pfade zu den Ressourcendateien:

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

In diesem Fall kann die Befehlszeilenoption „ --absolute-imports “ verwendet werden, um einen absoluten Import in Python zu generieren, was zu folgendem Ergebnis führt:

import resources.resources_rc

unter der Annahme, dass „ ..“ das Stammverzeichnis des Projekts ist, das in der Python-Importpfadliste enthalten ist.

Bei tiefer verschachtelten Verzeichnisstrukturen ist es möglich, die Befehlszeilenoption „ --python-paths <path list> “ zu verwenden, um eine Python-Importpfadliste zu übergeben. „ uic “ versucht dann, das Projektstammverzeichnis zu ermitteln, indem es den Pfad in der Formdatei mit den Pfadkomponenten abgleicht.

Wird „ --python-paths “ nicht angegeben, wird standardmäßig die Umgebungsvariable „ PYTHONPATH “ überprüft.

© 2026 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.