7 cosas que aprendí al construir un framework TUI moderno
La terminal es rápida
- Los emuladores de terminal modernos son software muy sofisticado
- Se puede usar renderizado acelerado por hardware para reducir el parpadeo de pantalla
- Tres trucos para reducir el parpadeo:
- no limpiar la pantalla, sino sobrescribirla
- escribir a la salida estándar de una sola vez
- usar el protocolo Synchronized Output
- Textual usa 60fps por defecto para ofrecer animaciones fluidas
DictViews son una sorpresa
- Los métodos
keys() e items() de los dict de Python devuelven KeysView e ItemsView
- Usar la diferencia simétrica de un objeto
ItemsView permite encontrar fácilmente los elementos modificados
- En Textual se usa cuando cambian propiedades de CSS para actualizaciones optimizadas
lru_cache es rápido
- El decorador
@lru_cache del módulo functools almacena en caché el valor de retorno de una función
- En Textual se mejora el rendimiento usando
@lru_cache en funciones pequeñas que se llaman con frecuencia
- Hay que revisar la información de caché (
cache_info()) para comprobar si el almacenamiento en caché está siendo efectivo
Los objetos inmutables son lo mejor
- Puedes obtener las ventajas de los objetos inmutables usando tuplas,
NamedTuple o dataclass congeladas en Python
- Usar objetos inmutables permite escribir código sin efectos secundarios, lo que facilita las pruebas y el almacenamiento en caché
El arte Unicode es bueno
- Los diagramas con caracteres de caja Unicode son muy útiles para la documentación
- Combinados con un buen
docstring, ayudan muchísimo
Las fracciones son exactas
- El módulo
fractions de Python permite evitar errores de punto flotante
- En Textual se usan fracciones para dividir la pantalla según proporciones e implementar layouts precisos
Los emojis son terribles
- El soporte de emojis en la terminal es impredecible y complejo
- Se usa la base de datos Unicode para verificar el ancho de los emojis, pero los emojis más nuevos pueden provocar resultados impredecibles
- Los emojis de múltiples code points causan problemas aún mayores
Resumen de GN⁺
- Este artículo ofrece tips y trucos útiles para desarrollar aplicaciones de terminal en Python
- Comparte consejos prácticos obtenidos a partir de la experiencia de desarrollo del framework Textual
- Explica cómo manejar problemas complejos como los emojis para ayudar a otros desarrolladores
- Proyectos con funciones similares incluyen urwid y prompt_toolkit
1 comentarios
Comentarios de Hacker News
Los desarrolladores de TUI terminan tratando Unicode, caracteres internacionales y emojis como un proyecto aparte
rivo/tviewyrivo/unisegMe molesta que Textual intente imitar a React
Después de probar Textual, resulta que sí hay que usar CSS
Este TUI se ve bonito, pero no se me ocurre en qué situación realmente lo usaría
kitty ofrece más funciones
No entiendo por qué a los ingenieros de software les interesan tanto los TUI
Monodraw es solo para MacOS, pero hay buenas alternativas en otras plataformas
"Sobrescribir, no borrar" era la forma en que se desarrollaban los juegos antes
Hay una forma de estimar la versión de Unicode consultando la posición del cursor en la terminal
wcwidthy he usado este métodoDespués de evaluar varias bibliotecas TUI, FTXUI fue la más fácil de usar y la más confiable