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?
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?
Respuestas:
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 uic
compila 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.
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.ui
archivo que contiene un QMainWindow
(así que simplemente elija crear una ventana principal en el File-New
diá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_())
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.
El archivo se crea y guarda, ahora generaremos el código Python a partir de él usando pyuic.
Espero que esto ayude a alguien.
También puede usar uic
en 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_())
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.py
que podría ser sobrescrito por el diseñador. Solo hace referencia a ui
través de la MyWindow
clase 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?
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.
en pyqt5 para convertir de un archivo ui a un archivo .py
pyuic5.exe youruifile.ui -o outputpyfile.py -x
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.
( Noviembre de 2020 ) Esto funcionó para mí ( UBUNTU 20.04 ):
pyuic5 /home/someuser/Documents/untitled.ui > /home/someuser/Documents/untitled.py