He estado experimentando con la librería PyQt6 desarrollando un proyecto ligero: un Rastreador de Portafolio Cripto. La idea fue migrar uno de mis scripts de línea de comandos a una aplicación de escritorio real, cargar un CSV con mis posiciones, obtener precios en vivo desde Kraken y mostrar todo en una tabla.
Resultó ser una forma práctica de explorar layouts de PyQt6, threading y manejo de eventos, creando una base sólida para aplicaciones a medida y software a medida de escritorio.
Resumen del proyecto: la app ofrece tres acciones principales Cargar Portafolio para importar un CSV con holdings, Refrescar Precios para consultar el API de Kraken y Exportar CSV para guardar los datos actualizados. Añadí multithreading para mantener la interfaz fluida, un sistema de logging y un archivo de configuración para mapear los símbolos del portafolio con los pares de trading de Kraken.
Núcleo de la interfaz: la ventana principal utiliza un QTableWidget para los datos del portafolio y tres botones para Cargar, Refrescar y Exportar, todo organizado en un VLayout sencillo. Los datos viven en un DataFrame de pandas con columnas symbol, amount, price y total_value, y la tabla se mantiene sincronizada con el DataFrame.
Carga del portafolio: al pulsar Cargar se abre un diálogo de archivos, se lee el CSV con pandas y se pinta en la tabla. Un CSV mínimo puede incluir las columnas symbol y amount con ejemplos como BTC 0.05, ETH 0.7 y DOGE 1000. El logger registra la ruta y el resultado de la carga para facilitar la depuración.
Obtención de precios con multihilo: regla de oro en GUIs no bloquear el hilo de la interfaz. Consultar la API de Kraken puede tardar, por lo que uso QThreadPool y un Worker basado en QRunnable. Al pulsar Refrescar, cada símbolo del portafolio se procesa en un hilo independiente. Previamente, cada símbolo se mapea a su par de Kraken mediante el archivo de configuración y se ejecuta el proceso que actualiza la información del par. De este modo la UI permanece siempre receptiva.
Ejemplo de mapeo en config ini para Kraken Symbols BTC a XXBTZUSD, ETH a XETHZUSD, DOGE a XDGUSD, USDT a USDTZUSD y SOL a SOLUSD. Este mapeo evita ambigüedades de nombres entre exchanges y normaliza las consultas.
Actualización de la tabla: una vez obtenidos los precios se actualizan el DataFrame y el QTableWidget. Las columnas visibles son symbol, amount, price y total_value, donde total_value se calcula como amount por price. Las cabeceras se sincronizan automáticamente con las columnas del DataFrame para mantener la coherencia.
Registro y empaquetado: el sistema de logging escribe tanto en consola como en un archivo app log, útil para comprender respuestas del API y detectar problemas de red. Para distribución, PyInstaller funciona bien, pero hay que cuidar recursos como el config ini empleando el conocido truco de sys _MEIPASS.
Lecciones aprendidas: el multihilo es crítico para evitar congelar la UI mientras llegan respuestas de Kraken; los layouts de PyQt6 son flexibles, aunque los anidados requieren ensayo y error; PyInstaller exige gestionar recursos externos con mimo; integrar pandas con QTableWidget simplifica mantener GUI y datos en sincronía.
Demostración y código fuente puedes ver un breve video de la app en esta demo en YouTube y consultar el repositorio completo en GitHub del proyecto.
Sobre Q2BSTUDIO en Q2BSTUDIO impulsamos soluciones de desarrollo de software y aplicaciones a medida, especialistas en inteligencia artificial, ciberseguridad, servicios cloud aws y azure, servicios inteligencia de negocio con power bi, automatización de procesos, ia para empresas y agentes IA. Convertimos prototipos como este rastreador cripto en productos listos para producción, robustos, seguros y escalables.
Si quieres crear una aplicación de escritorio o multiplataforma con integración de datos en tiempo real, te invitamos a explorar nuestro servicio de desarrollo de software a medida y aplicaciones multiplataforma. Y si deseas incorporar capacidades de modelos avanzados, asistentes y agentes IA a tus soluciones, descubre cómo lo hacemos en inteligencia artificial para empresas.