En esta página

Uso de un archivo Designer UI en su aplicación Qt for Python

Convirtiendo el Formulario a Código Python

Para demostrarlo, usaremos el ejemplo de animación easing de Qt Widgets.

La aplicación consiste en un archivo fuente, easing.py, un archivo UI form.ui, un archivo de recursos easing.qrc y el archivo del proyecto, easing.pyproject archivo en formato YAML:

{
    "files": ["easing.qrc", "ui_form.py", "easing.py", "easing_rc.py",
              "form.ui"]
}

El archivo UI se convierte a código Python construyendo el formulario usando el User Interface Compiler (uic):

uic -g python form.ui > ui_form.py

Como el widget de nivel superior se llama Form, se genera una clase Python llamada Ui_Form. Proporciona una función setupUi(), tomando el widget como parámetro, que es llamada para crear los elementos 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)

Posteriormente, se puede acceder a los widgets a través de la clase Ui_Form:

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

Además de setupUi(), Ui_Form proporciona otro método retranslateUi(), que puede ser llamado en reacción a un QEvent de tipo QEvent.LanguageChange, que indica un cambio en el lenguaje de la aplicación.

El enfoque UiTools

La clase QUiLoader proporciona un objeto cargador de formularios para construir la interfaz de usuario en tiempo de ejecución. Esta interfaz de usuario se puede recuperar desde cualquier QIODevice, por ejemplo, un objeto QFile. La función QUiLoader::load() construye el widget del formulario utilizando la descripción de la interfaz de usuario contenida en el archivo.

Se muestra en el ejemplo 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_())

Importación de recursos

Uso de un único directorio

Cuando se utilizan iconos de archivos de recursos, digamos resources.qrc, uic generará una importación del formulario:

import resources_rc

Esto supone que un archivo resources_rc.py generado llamando a la herramienta Resource Compiler (rcc) (pasando la opción de línea de comandos -g python ) existe en el mismo directorio que la fuente del formulario.

uic tiene una opción de línea de comandos --rc-prefix que hace que se anteponga el indicador rc:

import rc_resources

La opción de línea de comandos --from-imports hace que las importaciones se generen relativas a '.':

from . import resources_rc

Árboles de directorios

Algunos proyectos tienen árboles de directorios más complicados, por ejemplo:

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

El archivo de recursos no se encuentra entonces en el mismo directorio que el código fuente del formulario y los archivos .ui suelen tener rutas relativas a los archivos de recursos:

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

En este caso, la opción de línea de comandos --absolute-imports se puede utilizar para generar una importación absoluta en Python, lo que resulta en:

import resources.resources_rc

basado en la suposición de que .. es el directorio raíz del proyecto contenido en la lista de rutas de importación de Python.

Para árboles más profundamente anidados, es posible utilizar la opción de línea de comandos --python-paths <path list> para pasar una lista de rutas de importación de Python. uic intentará entonces determinar la raíz del proyecto comparando la ruta del archivo de formulario con los componentes de la ruta.

Si no se da --python-paths, la variable de entorno PYTHONPATH se comprueba por defecto.

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