QT Designer – aplicacion comentada PyQt5

Link al repositorio acá 

import sys
from PyQt5 import uic, QtGui
from PyQt5.QtWidgets import QMainWindow, QApplication


class MainWindow(QMainWindow): #nota7: cuando llama a la clase, viene por aca

    def __init__(self): #nota8: el __init__ de initialized, es el codigo que SIEMPRE se ejecuta, el def ventanaNueva no se ejecuta porque esta fuera de aca, aca se conectan botones, los eventos que vayan a pasar, las restricciones, etc...
        super().__init__() #superposiciona el init, siempre va.
        uic.loadUi('gui_1.ui', self) #aca se carga la gui
        self.pushButton.clicked.connect(self.ventanaNueva) #aca conecta el boton de nombre pushButton que nos da el designer y lo  conectamos a la funcion ventanaNueva

    def ventanaNueva(self):
        gui2.show() #y aca muestra la ventana y nada mas
        #gui2.showMaximized() #esto esta para que prueven cambiando y viendo como cambia
        #gui2.showMinimized() #esto esta para que prueven cambiando y viendo como cambia

class Window2(QMainWindow):
    def __init__(self):
        super().__init__()
        uic.loadUi('gui_2.ui', self)

if __name__ == '__main__':  #nota1: esto siempre va, es para que el programa siempre ejecute esta parte
    app = QApplication(sys.argv) #Nota2: aca crea un objeto para hacer las aplicaciones
    gui = MainWindow() #Nota3: todas las ventanas tendran su armado mediante esto, un objeto del tipo variable=Clase_del_objeto()
    gui2= Window2() #Nota4: para la gui2
    gui.show() #Nota5: aca muestra la gui principal la main, como ya la tiene armada(en Nota3) ahora la muestra mediante el metodo .show(), hay varias maneras, showMaximiced() la muestra maximixada por ej
    sys.exit(app.exec_()) #Nota6: esto es para que quede abierto, sino se cierra el programa, queda ejecutandose

Haciendo el ejecutable

asta acá puedes hacer tu programa y ejecutarlo a medida que vas modificando y agregando interfaces pero a la hora de hacer el ejecutable es necesario hacer cambios…

al momento de usar auto-py-to-exe, muy práctico a la hora de exportar me encontré con algunos problemas, pero recurrí a usar pyuic5 para transformar los .ui a .py y así usar todos los .py en el programa de auto-py-to-exe (donde encontrarlo

hay que instalar las librerías necesarias

pip install pyqt5-sip
pip install pyqt5 

con la terminal abierta en la ubicación donde estan los .ui se ingresa el siguiente codigo, usando pycharm puedes usar ALT+F12 y se abre abajo.

pyuic5 -x gui_1.ui -o gui_1_ui.py

la forma es: pyuic5 -x <archivo .ui> -o <nuevo_archivo .py>

el nombre de archivo.ui pasa a archivo_ui.py

para nuestro programa usamos…

>pyuic5 -x gui_1.ui -o gui_1_ui.py

>pyuic5 -x gui_2.ui -o gui_2_ui.py

Esto amerita unos cambios en el codigo…

import sys
from PyQt5 import uic, QtGui
from PyQt5.QtWidgets import QMainWindow, QApplication
from PyQt5 import QtWidgets

#####
from gui_1_ui import *  # NUEVO
from gui_2_ui import *  # NUEVO


#####

# class MainWindow(QMainWindow): #nota7: cuando llama a la clase, viene por aca
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):  # NUEVO

    def __init__(
            self):  # nota8: el __init__ de initialized, es el codigo que SIEMPRE se ejecuta, el def ventanaNueva no se ejecuta porque esta fuera de aca, aca se conectan botones, los eventos que vayan a pasar, las restricciones, etc...
        # super().__init__()  # superposiciona el init, siempre va.
        # uic.loadUi('gui_1.ui', self)  # aca se carga la gui
        QtWidgets.QMainWindow.__init__(self)  # NUEVO
        self.setupUi(self)  # NUEVO
        self.pushButton.clicked.connect(
            self.ventanaNueva)  # aca conecta el boton de nombre pushButton que nos da el designer y lo  conectamos a la funcion ventanaNueva

    def ventanaNueva(self):
        gui2.show()  # y aca muestra la ventana y nada mas
        # gui2.showMaximized() #esto esta para que prueven cambiando y viendo como cambia
        # gui2.showMinimized() #esto esta para que prueven cambiando y viendo como cambia


# class Window2(QMainWindow):
class Window2(QtWidgets.QWidget, Ui_Form):  # NUEVO
    def __init__(self):
        QtWidgets.QMainWindow.__init__(self)  # NUEVO
        self.setupUi(self)  # NUEVO
        # super().__init__()
        # uic.loadUi('gui_2.ui', self)


# if __name__ == '__main__':  # nota1: esto siempre va, es para que el programa siempre ejecute esta parte
#    app = QApplication(sys.argv)  # Nota2: aca crea un objeto para hacer las aplicaciones
#   gui = MainWindow()  # Nota3: todas las ventanas tendran su armado mediante esto, un objeto del tipo variable=Clase_del_objeto()
#    gui2 = Window2()  # Nota4: para la gui2
#    gui.show()  # Nota5: aca muestra la gui principal la main, como ya la tiene armada(en Nota3) ahora la muestra mediante el metodo .show(), hay varias maneras, showMaximiced() la muestra maximixada por ej
#    sys.exit(app.exec_())  # Nota6: esto es para que quede abierto, sino se cierra el programa, queda ejecutandose

app = QApplication([])  # NUEVO
gui = MainWindow()  # NUEVO
gui2 = Window2()  # NUEVO
gui.show()  # NUEVO
app.exec_()  # NUEVO

luego en una terminal de anaconda, ejecutamos Auto-py-to-exe

en Additional Files, agregamos los .py nuevos

pyinstaller –noconfirm –onefile –console –name «ejemplo4» –add-data «C:/Users/Gaston/PycharmProjects/ejemplo/gui_1_ui.py;.» –add-data «C:/Users/Gaston/PycharmProjects/ejemplo/gui_2_ui.py;.»  «C:/Users/Gaston/PycharmProjects/ejemplo/main.py»

el programa funciona pero se habre una terminal, con cambiarlo en  Console Window es suficiente

pyinstaller –noconfirm –onefile –windowed –name «ejemplo5» –add-data «C:/Users/Gaston/PycharmProjects/ejemplo/gui_1_ui.py;.» –add-data «C:/Users/Gaston/PycharmProjects/ejemplo/gui_2_ui.py;.»  «C:/Users/Gaston/PycharmProjects/ejemplo/main.py»

el codigo limpio queda asi…

import sys
from PyQt5 import uic, QtGui
from PyQt5.QtWidgets import QMainWindow, QApplication
from PyQt5 import QtWidgets
from gui_1_ui import *
from gui_2_ui import *


class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):

    def __init__(
            self):
        QtWidgets.QMainWindow.__init__(self)
        self.setupUi(self)
        self.pushButton.clicked.connect(
            self.ventanaNueva)

    def ventanaNueva(self):
        gui2.show()


class Window2(QtWidgets.QWidget, Ui_Form):
    def __init__(self):
        QtWidgets.QMainWindow.__init__(self)
        self.setupUi(self)


app = QApplication([])
gui = MainWindow()
gui2 = Window2()
gui.show()
app.exec_()

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *