Skip to content

Python de Cero a Pro - Cap. 19 - Interfaz de Usuario TUI Profesional

Este capítulo es el punto final de nuestra práctica secuencial.

  1. Módulo de Persistencia JSON 🗄️
  2. Módulo de Procesamiento de Fechas 🗓️
  3. Módulo de Seguridad y Ofuscación 🛡️
  4. Arquitectura de Modelos de Datos 🧩
  5. 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.

views/users_interface.py
import os
import sys
from rich.console import Console
from rich.table import Table
from rich.panel import Panel
from rich.align import Align
# Importamos nuestro modelo del Cap. 18
from 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.

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.


  1. Cambia los Colores: Modifica el header_style="bold magenta" por otros estilos como bold blue o bright_green y observa el cambio instantáneo.
  2. Añade una Columna: En la tabla, intenta añadir la columna “Teléfono” extrayéndola del diccionario del usuario (u.get('telefono')).
  3. 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