¿Alguna vez quisiste crear tu propia app para automatizar algo, pero pensaste que era muy difícil? A mí me pasó.
Todo comenzó cuando una amiga que no le gusta ser oprimida por el sistema me dijo que quería poder descargar videos sin tener que inundarse de publicidad y virus.
Así que se me ocurrió crear una aplicación pequeña para ella. Una vez terminado vi que esto podría mejorar así que decidí crear algo un poco más completo.
Al ver todo lo que tenía que hacer, decidí investigar y me encontré con esta herramienta muy común en el campo de Python: PyQt5.
¿Por qué PyQt5? 🤔
Es de las opciones más completas y potentes si te encuentras en la necesidad de crear una interfaz gráfica con Python. Es multiplataforma, se desenvuelve bien al trabajar con hilos (threads) y a diferencia de una herramienta similar como Tkinter, tiene soporte para todo lo que necesitarás. Tablas, botones, comboboxes, diálogos, etc.
Instalación de PyQt5
Como toda librería de python, podremos instalarla usando el comando:
pip install PyQt5
Capítulo 1: El esqueleto
Aunque he mencionado una app al inicio que es medianamente completa, en este artículo solo nos limitaremos a crear una app base para que puedas comenzar a crear tu propia aplicación.
El esqueleto
Nuestra app tendrá lo siguiente:
- Una ventana principal
- Un campo para ingresar texto
- Un botón que accionará un evento
- Separar los archivos para mayor escalabilidad
Estructura del proyecto
mi_app/
├── core/
│ └── logic.py
├── gui/
│ └── main_window.py
├── main.py
Como se puede ver, tendremos en esencia 3 archivos:
- El main: Será responsable de inicializar y lanzar la interfaz gráfica.
- main_window: El responsable de construir todos los elementos gráficos.
- logic: Que se encargará de manejar la lógica del negocio.
Capítulo 2: Los Elementos Gráficos en PyQt5 🔥💧🍃🪨
Main.py
import sys
from PyQt5.QtWidgets import QApplication
from gui.main_window import MainWindow
def main():
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()
Vemos que Main solo tiene un método definido el cual se ejecuta e instancia QApplication, que es el Widget de PyQt5 que se encarga de:
- Manejar eventos del sistema operativo.
- Gestionar recursos visuales.
- Correr el ciclo de eventos que mantiene viva la ventana.
Luego creamos una instancia de nuestra Clase MainWindow el cual se mostrará gracias al método show()
Y por último pasamos todo esto al sistema.
MainWindow.py
Ahora tenemos nuestra clase MainWindow. Usando varios elementos widgets de nuestra librería.
Primero nombra la aplicación como Mi primera App PyQt5
Segundo, crea la variable input, label y button. Usando las clases QLineEdit, QLabel y QPushButton. Que en esencia son los widgets básicos para crear elementos en nuestra interfaz.
Luego, conectamos el botón con el método say_hello
Layout
Como vemos, luego de crear las variables anteriores. Se crea una variable llamada layout, que es la forma en la que la librería acomoda los elementos en la interfaz. Básicamente es un cuadro "invisible" en la cual se van insertando los widgets que vamos creando.
Por ultimo se crea un contenedor principal al cual establecemos el layout.
Sé que parece incongruente que un layout se agregue a un widget y un widget se agregue a layouts. Pero entenderás esto de manera más clara mientras vas creando tu aplicación
Y al final tendremos el método que será accionado al hacer click en el botón. El cual conseguirá el texto que se ingresó en el input y lo validará para mostrar en el label
Logic
Por último tenemos la clase Logic que se encargará de manejar las reglas del negocio. Esto es importante porque recordemos que es necesario separar la lógica de la interfaz.
Por simplicidad, haremos que la clase solo tenga un método el cual validará si el texto ingresado es o no un número. Y de serlo, deberá mostrar que el texto no es válido (tal como se ve en el método say_hello de la clase MainWindow)
Capítulo 3: El conjuro 🪄
Ahora al ejecutar esto nos aparecerá lo siguiente. Una simple ventana increíblemente chiquita. Con el input, el botón de acción y un label cuyo texto cambiará si ingresamos un texto en el input
Texto ingresado:
Capítulo 4: Viaje terminado
Y así es como se puede comenzar a crear aplicaciones de escritorio en Python. Con una estructura de archivos base que nos ayudará a separar los diferentes aspectos de nuestro programa.
Esto parece ser tonto al inicio pero es fundamental porque muchas veces podremos desconocer que tanto puede crecer un proyecto mientras se va desarrollando. Esto nos permite poder reducir muchos tiempos de desarrollo ya que está modulado desde el inicio.
Si haz llegado hasta aquí, ¡Muchas gracias por leer este artículo!, te animo a dejar un comentario de cualquier tipo. Y cualquier duda ten por seguro que te la responderé a la brevedad. 😁
Top comments (0)