¿Vinculando un archivo qtDesigner .ui a python / pyqt?


81

Entonces, si entro en QtDesigner y construyo una interfaz de usuario, se guardará como un archivo .ui. ¿Cómo puedo hacer esto como un archivo de Python o usarlo en Python?


1
He usado PySide QUiLoader para lograr precisamente eso; consulte la publicación [4442286] [1] [1]: stackoverflow.com/questions/4442286
Sven

El siguiente método es aún más práctico: stackoverflow.com/questions/14892713/…
publicado el

Respuestas:


61

Otra forma de usar .ui en su código es:

from PyQt4 import QtCore, QtGui, uic
class MyWidget(QtGui.QWidget)
    ...
    #somewhere in constructor:
    uic.loadUi('MyWidget.ui', self)

ambos enfoques son buenos. No olvide que si usa archivos de recursos Qt (extremadamente útiles) para iconos, etc., también debe compilarlos:

pyrcc4.exe -o ui/images_rc.py ui/images/images.qrc

Tenga en cuenta que cuando uiccompila la interfaz, agrega 'import images_rc' al final del archivo .py, por lo que debe compilar recursos en el archivo con este nombre o cambiarle el nombre en el código generado.


2
¿Podría agregar cómo acceder a una variable una vez que lo haya hecho? ¿Como pushButton?
Jonathan

2
@JonathanLeaders Si hay un botón definido en el archivo .ui, simplemente llámelo así: self.pushButton. También puede cargar ui a cualquier atributo de clase que desee: uic.loadUi ('uifile.ui', self.ui) y llamar a widgets y cosas como self.ui.pushButton.
Maxim Popravko

48

Combinando la respuesta de Max y la publicación de la lista de correo de Shriramana Sharma , construí un pequeño ejemplo de trabajo para cargar un mywindow.uiarchivo que contiene un QMainWindow(así que simplemente elija crear una ventana principal en el File-Newdiálogo de Qt Designer ).

Este es el código que lo carga:

import sys
from PyQt4 import QtGui, uic

class MyWindow(QtGui.QMainWindow):
    def __init__(self):
        super(MyWindow, self).__init__()
        uic.loadUi('mywindow.ui', self)
        self.show()

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    window = MyWindow()
    sys.exit(app.exec_())

3
Esta debería ser la mejor respuesta, porque es un ejemplo completo.
Francesco Pasa

29

Necesita generar un archivo python desde su archivo ui con la herramienta pyuic (site-packages \ pyqt4 \ bin)

pyuic form1.ui > form1.py

con pyqt4

pyuic4.bat form1.ui > form1.py

Luego puede importar el formulario1 en su secuencia de comandos.


25

Encontré este artículo muy útil.

http://talk.maemo.org/archive/index.php/t-43663.html

Describiré brevemente las acciones para crear y cambiar un archivo .ui a un archivo .py, extraídas de ese artículo.

  1. Inicie Qt Designer desde su menú de inicio.
  2. Desde la ventana "Nuevo formulario", cree la "Ventana principal"
  3. Desde "Mostrar widgets" hacia la parte inferior de su "Menú de cuadro de widgets" en el lado izquierdo
    agregue un "Widget de etiqueta". (Haga clic en Arrastrar y soltar)
  4. Haga doble clic en el widget de etiquetas recién agregado para cambiar su nombre a "Hola mundo"
  5. en este punto, puede usar la tecla de acceso rápido Control + R para ver cómo se verá.
  6. Agregue botones o texto u otros widgets arrastrando y soltando si lo desea.
  7. Ahora guarde su formulario .. Archivo-> Guardar como-> "Hello World.ui" (Control + S también traerá
    la opción "Guardar como") Anote el directorio donde guardó su
    archivo .ui "Hello World" . (Guardé el mío en (C :) por conveniencia)

El archivo se crea y guarda, ahora generaremos el código Python a partir de él usando pyuic.

  1. Desde su menú de inicio, abra una ventana de comando.
  2. Ahora "cd" en el directorio donde guardaste tu "Hello World.ui" Para mí, solo tenía que "cd \" y estaba en mi indicador "C:>", donde estaba guardado mi "Hello World.ui".
  3. Cuando llegue al directorio donde está almacenado su archivo, escriba lo siguiente.
  4. pyuic4 -x helloworld.ui -o helloworld.py
  5. ¡¡Felicidades!! ¡Ahora tiene una aplicación GUI Python Qt4!
  6. Haga doble clic en su archivo helloworld.py para ejecutarlo. (Yo uso pyscripter y al hacer doble clic
    se abre en pyscripter, luego "ejecuto" el archivo desde allí)

Espero que esto ayude a alguien.


1
Estaba compilando usando: pyuic4 helloworld.ui> helloworld.py. Uno realmente tiene que pasar los argumentos -x y -o a pyuic4. ¡Gracias por la información!.
muammar

Gran explicación, especialmente que el código de "generación de la GUI" está realmente en el archivo generado me ayudó, ¡salud!
Valmond

16

También puede usar uicen PyQt5 con el siguiente código.

from PyQt5 import uic, QtWidgets
import sys

class Ui(QtWidgets.QDialog):
    def __init__(self):
        super(Ui, self).__init__()
        uic.loadUi('SomeUi.ui', self)
        self.show()

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    window = Ui()
    sys.exit(app.exec_())

12

En mi opinión, la forma más limpia es exportar primero a .py como se mencionó anteriormente:

pyuic4 foo.ui > foo.py

Y luego úselo dentro de su código (por ejemplo main.py), como:

from foo import Ui_MyWindow


class MyWindow(QtGui.QDialog):
    def __init__(self):
        super(MyWindow, self).__init__()

        self.ui = Ui_MyWindow()
        self.ui.setupUi(self)

        # go on setting up your handlers like:
        # self.ui.okButton.clicked.connect(function_name)
        # etc...

def main():
    app = QtGui.QApplication(sys.argv)
    w = MyWindow()
    w.show()
    sys.exit(app.exec_())

if __name__ == "__main__":
    main()

De esta forma, otras personas que no usan qt-designer pueden leer el código, y también mantienen su código de funcionalidad fuera de lo foo.pyque podría ser sobrescrito por el diseñador. Solo hace referencia a uitravés de la MyWindowclase como se ve arriba.


self.ui.okButton.clicked.connect(self.function_name)me da TypeError: event() takes 1 positional argument but 2 were given. ¿Cómo lo resolviste?
Ahsanul Haque

9

Puede convertir sus archivos .ui en un archivo Python ejecutable usando el siguiente comando.

pyuic4 -x form1.ui > form1.py

Ahora puede ejecutar inmediatamente el archivo Python como

python3(whatever version) form1.py

Puedes importar este archivo y puedes usarlo.


FYI Si omite la opción -x, no obtendrá la parte del código que crea y ejecuta la aplicación. He visto algunas respuestas que omiten "-x". Esta respuesta es la más completa.
No es una máquina

5

puedes compilar los archivos de interfaz de usuario como este

pyuic4 -x helloworld.ui -o helloworld.py

4

Para compilar archivos .ui en archivos .py, hice:

python pyuic.py form1.ui > form1.py

Att.


2

en pyqt5 para convertir de un archivo ui a un archivo .py

pyuic5.exe youruifile.ui -o outputpyfile.py -x


0

Usando Anaconda3 (septiembre de 2018) y QT Designer 5.9.5. En QT Designer, guarde su archivo como ui. Abra el indicador Anaconda. Busque su archivo: cd C: .... (copie / pegue la ruta de acceso de su archivo). Luego escriba: pyuic5 -x helloworld.ui -o helloworld.py (helloworld = nombre de su archivo). Entrar. Inicie Spyder. Abra su archivo .py.


0

( Noviembre de 2020 ) Esto funcionó para mí ( UBUNTU 20.04 ):

pyuic5 /home/someuser/Documents/untitled.ui > /home/someuser/Documents/untitled.py
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.