Textual - framework rápido de desarrollo de aplicaciones para Python
(github.com/Textualize)- Textual es un framework que permite crear interfaces de usuario multiplataforma con una API simple de Python y ejecutar apps en la terminal o en el navegador web
- La API combina elementos modernos de Python y del desarrollo web, y facilita el mantenimiento a largo plazo con componentes desacoplados y un framework avanzado de pruebas
- La biblioteca de widgets ofrece botones, controles de árbol, tablas de datos, entradas, áreas de texto y más, junto con un sistema flexible de layouts y temas predefinidos
- Internamente es un framework asíncrono, puede integrarse con bibliotecas async si se desea, pero no obliga a usar async
- Se instala con
pip install textual textual-dev, y la demo puede ejecutarse conpython -m textual- También es posible ejecutar textual demo sin instalar nada usando
uvx --python 3.12 textual-demo, aunque este método requiere uv
- También es posible ejecutar textual demo sin instalar nada usando
- El paquete
textual-devofrece una consola de desarrollo que se conecta a la aplicación desde otra terminal y permite revisar mensajes del sistema, eventos, logs y la salida deprint - Las apps de Textual incluyen una paleta de comandos con búsqueda difusa que se abre con
ctrl+py puede ampliarse con comandos personalizados para la aplicación textual serve "python -m textual"permite servir apps de Textual en la web, y Textual Web admite el despliegue de aplicaciones además del servicio local- Las apps de Textual tienen bajos requisitos del sistema, pueden instalarse donde sea que corra Python y no requieren escritorio
1 comentarios
Opiniones de Hacker News
La demo de Textual que más me gusta ahora es https://github.com/1j01/textual-paint
Es una imitación bastante buena de Microsoft Paint que corre en la terminal
Una de las primeras cosas que agregué al crear un nuevo proyecto en Python fue https://github.com/Textualize/rich
La elegí porque hace muy fácil que la salida de la terminal se vea bien
En cambio, Rich es excelente y hace que el flujo de desarrollo sea muy fluido. Me gusta que tenga una buena API para usar de inmediato funciones como negritas, colores, emojis y tablas
Se ve bastante genial
En una empresa de trading donde trabajé antes, usamos lanterna (https://github.com/mabe02/lanterna/tree/master) cuando creamos una UI de texto para un proceso importante. Era un proceso que recibía datos de mercado actualizados y manejaba cambios entre la sesión de trading anterior y la de hoy, como cambios de nombre de acciones (de PCLN a BKNG) o cambios de categoría por variaciones en la capitalización de mercado
Eran tareas que el sistema en tiempo real no procesaba, pero que ocurrían con demasiada frecuencia o eran complicadas de manejar manualmente. La empresa tenía una UI de escritorio para el personal de trading, pero no existía el concepto de UI de servidor, y los servidores eran headless
No había desarrolladores frontend, y los programadores backend, de sistemas y de datos solo tocaban el frontend de vez en cuando, así que las UI web eran muy simples o estaban hechas para usos específicos, y tampoco había herramientas comunes
Si hubiera sido 2023 quizá habría elegido create-react-app o next.js, pero quería que fuera fácil de acceder incluso desde una conexión SSH pésima por 4G compartido durante una guardia, así que descarté X11 forwarding y RDP. Por eso busqué un constructor de TUI que pudiera usarse en Java, el lenguaje del proyecto
Lo bueno de Lanterna era que tenía una implementación basada en Swing, así que podía ejecutarla directamente en IntelliJ e iterar rápido, y en producción podía correr la terminal por SSH en la máquina donde estaba el servidor
Voy a seguir de cerca Textual para ver si se puede construir algo interesante. Las apps web todavía no me gustan mucho porque siento que requieren mucho más esfuerzo para obtener resultados que un producto funcionalmente equivalente hecho como TUI o GUI de escritorio, no en el navegador
Lamentablemente, parece que lo de “desarrollo rápido de aplicaciones” también aplica a la propia biblioteca
Hay una nueva versión cada dos semanas y se rompe en lugares algo difíciles de predecir. Es fácil crear un prototipo con Textual, pero después mantenerlo es difícil
Dicho eso, mientras siga en la versión 0.x, estamos aprovechando al máximo la posibilidad de cambiar un poco de rumbo cuando se vuelve claro que hay un enfoque mejor en alguna área
Cuando sacamos una nueva versión, intentamos destacar lo más posible los cambios incompatibles. Si hay algo difícil de sortear o complicado de hacer funcionar otra vez, puedes pedir ayuda en GitHub Issues, en Discussions o, si quieres, en Discord
No soy un desarrollador con mucha experiencia en Python, así que pregunto: ¿qué tan fácil es convertir esto en un binario sin muchas dependencias?
Estoy buscando algo que ayude a crear paquetes de instalación de producto para Windows y Linux. Antes o después de que el cliente instale el software, se necesitan tareas de configuración como escribir archivos INI, verificar conexiones a la DB y revisar un servidor HTTP
Se ve bien. Acabo de crear una app interna de DevOps y gestión de cambios con unicurses y Python; funciona, pero no creo que escale bien
Al principio intenté con TK y QT, pero ambos tenían peculiaridades en la instalación inicial. QT funciona bien, pero le falta documentación útil
Textual parece encajar justo con los requisitos, así que definitivamente voy a probarlo
Le eché un vistazo rápido a https://textual.textualize.io/tutorial/ y https://github.com/Textualize/textual/blob/main/docs/example...
Me da curiosidad saber qué han usado con éxito en Go. Lo atractivo de Textualize es que se siente bastante como un navegador web y hasta las vistas de tablas con scroll quedan prolijas
tviewtambién se ve interesante, pero por ejemplo al mirarbrew install dbui, da más la sensación de manejar directamente lógica imperativa tipoif KeyPress.A: do_something()que de tener navegación declarativa y anidadaQuizá sea la diferencia entre una perspectiva centrada en la aplicación/SPA, de “controlarlo todo”, y una perspectiva centrada en documentos, de “agregar componentes a la página y dejar que fluyan”. Me interesa recibir comentarios sobre los elementos de esta lista: https://codeberg.org/tecras/awesome-go#advanced-console-uis
if KeyPress.A: do_something()”, ¿te refieres a que no oculta el message loop como se acostumbra hoy, sino que te deja controlarlo de verdad?https://github.com/gizak/termui
Lazarus/Freepascal es la respuesta. Lo demás es casi un retroceso
¿Estas animaciones y transiciones están implementadas solo con texto ASCII puro?
Hablando en serio, vale la pena echarle un vistazo a las funciones de “easing” y transiciones. Un retraso de unos 500 ms puede molestar a usuarios expertos, pero parece ayudar a dar contexto mientras uno aprende a navegar por la app
Me pregunto cómo se sostienen proyectos como este
Este proyecto lleva 2 años en desarrollo y no veo una fuente de ingresos. Me pregunto si los desarrolladores reciben algún tipo de compensación
https://www.willmcgugan.com/blog/tech/post/from-open-source-...
También hay que considerar el mercado. En 2023, literalmente casi nadie va a pagar por usar una biblioteca de widgets para terminal