Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> python

Tutorial Completo PyQt5: Construye GUIs Profesionales en Python

¿Qué es PyQt?

PyQt es un binding de Python para el framework Qt, una librería C++ multiplataforma usada para crear aplicaciones GUI nativas en Windows, macOS, Linux, Android, iOS, Raspberry Pi y más. El binding es mantenido por Riverbank Computing (UK), mientras que Qt es desarrollado por The Qt Company (Finlandia). PyQt da a desarrolladores Python acceso al rico conjunto de widgets, networking, base de datos, 3D y capacidades multimedia de Qt.

En este tutorial aprenderás:

Características Clave de PyQt5

PyQt5 expone más de 600 clases que cubren:

Estas capacidades permiten construir aplicaciones desktop y embebidas complejas de alto rendimiento. Grandes corporaciones como LG, Mercedes-Benz, AMD, Panasonic y Harman confían en Qt para sus stacks de UI.

Versiones de PyQt

Riverbank Computing ofrece dos bindings principales:

Adicionalmente, PyQt3D provee bindings Python para el framework Qt3D, útil para rendering 3D en tiempo real y simulación.

Instalando PyQt5

Dos métodos comunes de instalación se describen abajo. Recomendamos usar paquetes wheel porque incluyen binarios C++ compilados y evitan procesos de build largos.

Método 1: Instalación vía Wheels (Recomendado)

  1. Abre tu terminal o línea de comandos preferida.
  2. Ejecuta pip install PyQt5 para descargar el wheel (≈ 50 MB).
  3. Verifica que la instalación complete exitosamente.

Ejemplo en Windows:

Tutorial Completo PyQt5: Construye GUIs Profesionales en Python
pip install PyQt5

Una vez instalado, puedes importar PyQt5.QtWidgets y empezar a construir aplicaciones.

Método 2: Build desde Fuente

Compilar desde fuente es más complejo porque compila código C++. Solo es necesario si necesitas modificaciones custom o el wheel para tu plataforma no está disponible.

Fundamentos de Programación PyQt5

Abajo, ejemplo mínimo que abre ventana 300×300 titulada "Guru99". Cada línea está anotada para claridad.

import sys
from PyQt5.QtWidgets import QApplication, QWidget
if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = QWidget()
    w.resize(300, 300)
    w.setWindowTitle("Guru99")
    w.show()
    sys.exit(app.exec_())

Explicación:

Añadiendo Interactividad

El siguiente ejemplo añade label, botón y message box que aparece al hacer click. Demuestra signals y slots, el core del sistema de eventos de Qt.

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QMessageBox
def dialog():
    mbox = QMessageBox()
    mbox.setText("Tu lealtad ha sido registrada")
    mbox.setDetailedText("Ahora eres discípulo y súbdito del Guru omnisciente")
    mbox.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel)
    mbox.exec_()
if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = QWidget()
    w.resize(300, 300)
    w.setWindowTitle("Guru99")
    label = QLabel("He aquí el Guru, Guru99", w)
    label.move(100, 130)
    btn = QPushButton("Visto", w)
    btn.move(110, 150)
    btn.clicked.connect(dialog)
    w.show()
    sys.exit(app.exec_())

Clickear el botón dispara dialog(), que crea un QMessageBox modal.

Componentes y Widgets Centrales

La arquitectura de PyQt5 está organizada en varios módulos. Entender esta jerarquía ayuda a importar solo lo necesario.

Visión General de Módulos

Widgets Comunes

Gestión de Layouts

En lugar de posicionar widgets manualmente con move() y resize(), Qt ofrece layout managers que arreglan widgets automáticamente basado en tamaño de ventana.

Box Layouts (HBox & VBox)

QHBoxLayout arregla widgets horizontalmente; QVBoxLayout verticalmente.

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QHBoxLayout, QVBoxLayout
app = QApplication([])
win = QWidget()
win.setWindowTitle("Mosqueteros")
btn1 = QPushButton("Athos")
btn2 = QPushButton("Porthos")
btn3 = QPushButton("Aramis")
hbox = QHBoxLayout(win)
hbox.addWidget(btn1)
hbox.addWidget(btn2)
hbox.addWidget(btn3)
win.show()
app.exec_()

Reemplaza QHBoxLayout con QVBoxLayout para apilar botones verticalmente.

Grid Layout

Organiza widgets en grid 2D. El método addWidget() acepta índices de fila y columna más argumentos opcionales de row-span y column-span.

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QGridLayout
app = QApplication([])
win = QWidget()
layout = QGridLayout(win)
for i in range(3):
    for j in range(3):
        layout.addWidget(QPushButton(f"Botón {i},{j}"), i, j)
win.show()
app.exec_()

Temas y Estilos Personalizados

PyQt5 soporta temas nativos y stylesheets personalizados.

Temas Integrados

Establece estilo de aplicación con app.setStyle("Fusion") u otro estilo disponible.

app = QApplication([])
app.setStyle("Fusion")

Personalización de Paleta

Usa QPalette para modificar colores de widgets programáticamente.

from PyQt5.QtGui import QPalette
from PyQt5.QtCore import Qt
palette = QPalette()
palette.setColor(QPalette.ButtonText, Qt.black)
palette.setColor(QPalette.Window, Qt.black)
palette.setColor(QPalette.Button, Qt.gray)
app.setPalette(palette)

Qt Style Sheets (CSS-like)

Para styling avanzado, aplica stylesheets directamente a widgets o toda la aplicación.

btn.setStyleSheet("background-color: #4CAF50; color: white; padding: 5px;")

Puntos Clave

python

  1. Dominando Colecciones en C#: Tutorial Práctico con Ejemplos del Mundo Real
  2. Función print() en Python: Guía Práctica con Ejemplos
  3. Domine str.count() en Python: Cómo Contar Caracteres y Subcadenas con Ejemplos
  4. Domine el Formateo de Strings en Python con format(): Ejemplos Claros
  5. Domine el Método String.find() en Python: Sintaxis, Ejemplos y Alternativas
  6. Dominando las funciones lambda en Python: ejemplos prácticos y mejores prácticas
  7. Función round() en Python explicada con ejemplos prácticos
  8. Dominando la función map() de Python: sintaxis, ejemplos y mejores prácticas
  9. Python timeit(): medición de tiempo de ejecución con ejemplos prácticos
  10. Counter de collections en Python: conteo eficiente, actualización y operaciones aritméticas
  11. Entendiendo type() e isinstance() en Python: ejemplos prácticos