Fundamentos de POO para interfaces gráficas en Python

Primer programa con PySide2 / Qt for Python

Instalar PySide2 se puede hacer fácilmente con pip:

pip install pyside2

La estructura principal de un programa en PySide2 es muy parecida a la de WxPython, aquí también necesitamos crear un contenedor para la ventana.

Hay varios pero el más común es el widget para la ventana principal:

hola_qt.py

from PySide2 import QtWidgets as QW

# Creamos una nueva app
app = QW.QApplication()

# Creamos la ventana principal y la mostramos
window = QW.QMainWindow()
window.resize(200, 100)
window.show()

# Iniciamos el bucle
app.exec_()

Añadir un botón y conectarlo a una función también se hace casi igual que en WxPython:

def hola(self):
    print("¡Hola mundo!")


# ...

# Creamos el botón y lo conectamos
button = QW.QPushButton("Hola", window)
button.clicked.connect(hola)

Este es el código correcto, sin embargo no veremos el botón. Esto es debido a que en Qt tenemos que mostrar la ventana al final, después de haber añadido sus componentes:

# Creamos la ventana principal
window = QW.QMainWindow()
window.resize(200, 100)

# Creamos el botón y lo conectamos
button = QW.QPushButton("Hola", window)
button.clicked.connect(hola)

# Mostramos la ventana principal
window.show()

Ya lo tenemos, en mi opinión la sintaxis es más intuitiva que en las otras bibliotecas, no sé qué pensaréis vosotros.

En fin, vamos a llevar este código a nuestra propia clase para dejarlo finiquitado:

from PySide2 import QtWidgets as QW


class MainWindow(QW.QMainWindow):
    # Creamos nuestra ventana a partir de un QMainWindow
    def __init__(self):
        # Con super ejecutamos su propio constructor
        # Así se crea la ventana en su propia instancia self
        super().__init__()
        # Redimensionamos y añadimos el botón
        self.resize(200, 100)
        button = QW.QPushButton("Hola", self)
        button.clicked.connect(self.hola)
        # Finalmente mostramos la ventana
        self.show()

    def hola(self):
        print("¡Hola mundo!")


# Creamos la aplicación, la ventana e iniciamos el bucle
app = QW.QApplication()
window = MainWindow()
app.exec_()

¿Qué os ha parecido PySide2? ¿Verdad que es prácticamente la misma lógica que WxPython pero cambiando un poco la sintaxis? Ya os dije al comenzar el curso que todas las biblioteas se parecían mucho.

En cualquier caso os dejaré la documentación en los apuntes para que aprendáis un poco más por vuestra cuenta:

Y con esto acabamos.

Como dije en el futuro os enseñaré a crear algunos proyectos interesantes con PySide2, así que tendréis más oportunidades de practicarlo en la academia.

Espero que el curso os haya servido, sobretodo la unidad de programación orientada a objetos. Esos conocimientos se utilizan no sólo en bibliotecas de interfaces, sino también en desarrollo web, videojuegos y muchos otros ámbitos, así que repasadlos de tanto en tanto.

Un saludo a todos y nos vemos por la academia.