Python de Cero a Pro - Cap. 19 - Interfaz de Usuario TUI Profesional
Serie: Arquitectura de Sistemas 🏗️
Section titled “Serie: Arquitectura de Sistemas 🏗️”Este capítulo es el punto final de nuestra práctica secuencial.
- Módulo de Persistencia JSON 🗄️
- Módulo de Procesamiento de Fechas 🗓️
- Módulo de Seguridad y Ofuscación 🛡️
- Arquitectura de Modelos de Datos 🧩
- Interfaz de Usuario TUI Profesional (Estás aquí) 📍
Interfaz de Usuario TUI Profesional (users_interface.py) 🎮
Section titled “Interfaz de Usuario TUI Profesional (users_interface.py) 🎮”En este capítulo final, uniremos todas las piezas (Persistencia, Seguridad y el Modelo User) en una interfaz visual interactiva que parece un programa de escritorio, pero dentro de la terminal. Aprenderemos a capturar cada pulsación del teclado y a dibujar paneles estéticos con Rich.
El Código (Fragmentos Clave para Entender la Lógica)
Section titled “El Código (Fragmentos Clave para Entender la Lógica)”Este código suele ser extenso, por lo que nos enfocaremos en las partes que hacen magia visual.
import osimport sysfrom rich.console import Consolefrom rich.table import Tablefrom rich.panel import Panelfrom rich.align import Align
# Importamos nuestro modelo del Cap. 18from models.Users import User
console = Console()
def limpiar_pantalla(): """Limpia la terminal según el sistema operativo.""" console.clear()
def mostrar_tabla_usuarios(): """Muestra la base de datos completa en una tabla profesional.""" usuarios = User.Consultar_Usuarios()
if not usuarios: console.print(Align.center("[bold red][!] No hay usuarios registrados.[/bold red]")) return
# Usamos Rich para crear una tabla con estilos tabla = Table(title="REGISTROS DE USUARIOS", header_style="bold magenta") tabla.add_column("Usuario", style="cyan", no_wrap=True) tabla.add_column("Nombre Completo", style="white") tabla.add_column("Email", style="green") tabla.add_column("Edad", justify="center")
for u in usuarios: # Añadimos cada usuario como una fila tabla.add_row( u.get('user', 'N/A'), f"{u.get('nombre')} {u.get('apellido_1')}", u.get('email', 'N/A'), str(u.get('edad', '0')) )
limpiar_pantalla() console.print(Align.center(tabla))
# --- Ejemplo de Ejecución Directa (Para Pruebas) ---if __name__ == "__main__": try: print("--- Iniciando Vista TUI Qué Pasa Linux ---") # Nota: mostrar_tabla_usuarios() intentará leer de data/users/users.json # Asegúrate de haber guardado al menos un usuario en el Cap 18. mostrar_tabla_usuarios() print("\n✅ Interfaz renderizada con éxito.") except Exception as e: print(f"❌ Error al renderizar la interfaz: {e}")🧠 Conceptos Detallados para Principiantes 🔍
Section titled “🧠 Conceptos Detallados para Principiantes 🔍”1. ¿Qué es una TUI (Text User Interface)?
Section titled “1. ¿Qué es una TUI (Text User Interface)?”Es una interfaz gráfica (con paneles, tablas y menús) pero dibujada exclusivamente con caracteres de texto. Es la forma en que los administradores de sistemas y desarrolladores de Qué Pasa Linux interactuamos con las herramientas más poderosas.
2. Captura de Teclado “En Tiempo Real”
Section titled “2. Captura de Teclado “En Tiempo Real””En los programas básicos, usas input() y tienes que presionar ENTER. En una TUI profesional, usamos msvcrt (Windows) o tty (Linux) para capturar el teclado al instante. Esto nos permite:
- Navegar con las flechas del teclado.
- Salir con la tecla ESC inmediatamente.
- Acciones Rápidas (presionar ‘S’ para salir, ‘G’ para guardar).
3. El Poder Visual de Rich: Paneles y Tablas
Section titled “3. El Poder Visual de Rich: Paneles y Tablas”Python por sí solo no sabe centrar texto o dibujar bordes redondos. Rich es una librería que “enseña” a la terminal a interpretar colores y formas.
Panel(): Envuelve tu información en un cuadro artístico. Es ideal para avisos o formularios.Align.center(): Calcula el ancho de tu terminal y pone el contenido justo en medio. Se adapta si estiras la ventana de tu consola.
4. Flujo del Programa (Bucle Principal)
Section titled “4. Flujo del Programa (Bucle Principal)”Una TUI es un bucle infinito (while True). El programa dibuja el menú, se queda esperando a que presiones una tecla, ejecuta la acción (ej: Registrar Usuario) y vuelve a dibujar el menú. Solo se rompe cuando presionas el botón de Salida.
¿Por qué esto es fundamental para el Desarrollo Profesional? 🚀
Section titled “¿Por qué esto es fundamental para el Desarrollo Profesional? 🚀”A un usuario no le gusta escribir comandos complicados. Una interfaz bien diseñada reduce errores, hace que el sistema se sienta “vivo” y demuestra que tu software es de alta calidad. Al estar desacoplado de los datos (la TUI solo “dibuja” lo que el modelo User le da), puedes cambiar el diseño visual sin tocar nunca la base de datos.
Ejercicios de Práctica 📝
Section titled “Ejercicios de Práctica 📝”- Cambia los Colores: Modifica el
header_style="bold magenta"por otros estilos comobold blueobright_greeny observa el cambio instantáneo. - Añade una Columna: En la tabla, intenta añadir la columna “Teléfono” extrayéndola del diccionario del usuario (
u.get('telefono')). - Mensaje Centrado: Crea un pequeño script que use
Align.center(Panel("¡Hola Qué Pasa Linux!"))y comprueba que se ajusta perfectamente al centro de tu terminal.
Final de la Serie: Volver al Inicio