Textual - Un framework de développement rapide d’applications pour Python
(github.com/Textualize)- Textual est un framework qui permet de créer des interfaces utilisateur multiplateformes avec une API Python simple, et d’exécuter les apps dans un terminal ou un navigateur web
- L’API combine le Python moderne avec les avancées du développement web, et facilite la maintenance à long terme grâce à des composants découplés et à un framework de test avancé
- Sa bibliothèque de widgets fournit des boutons, des contrôles d’arborescence, des tableaux de données, des champs de saisie, des zones de texte, etc., ainsi qu’un système de mise en page flexible et des thèmes prédéfinis
- En interne, il s’agit d’un framework asynchrone ; il peut s’intégrer à des bibliothèques async si souhaité, sans imposer l’utilisation de l’async
- Il s’installe avec
pip install textual textual-dev, et la démo peut être lancée avecpython -m textual- Il est possible d’exécuter la démo textual sans installation avec
uvx --python 3.12 textual-demo; cette méthode nécessite uv
- Il est possible d’exécuter la démo textual sans installation avec
- Le package
textual-devfournit une console de développement qui se connecte à l’application depuis un autre terminal, avec prise en charge de l’affichage des messages système, des événements, des messages de log et de la sortieprint - Les apps Textual proposent une palette de commandes avec recherche floue, accessible via
ctrl+p, et extensible avec des commandes personnalisées pour l’application - Avec
textual serve "python -m textual", il est possible de servir une app Textual sur le web ; Textual Web prend en charge le service d’applications au-delà du service local - Les apps Textual ont de faibles exigences système, peuvent être installées partout où Python s’exécute, et ne nécessitent pas d’environnement de bureau
1 commentaires
Avis de Hacker News
La démo de Textual que je préfère en ce moment, c’est https://github.com/1j01/textual-paint
C’est une assez bonne imitation de Microsoft Paint qui tourne dans le terminal
L’une des premières choses que j’ai ajoutées en créant un nouveau projet Python a été https://github.com/Textualize/rich
Je l’ai choisi parce qu’il rend la sortie du terminal tellement facile à rendre agréable
En revanche, Rich est excellent et rend le flux de développement très fluide. J’aime le fait qu’il fournisse une bonne API pour utiliser directement le gras, les couleurs, les emojis, les tableaux, etc.
Ça a l’air assez chouette
Dans une société de trading où je travaillais auparavant, nous utilisions lanterna (https://github.com/mabe02/lanterna/tree/master) pour créer une UI texte destinée à des processus importants. C’était un processus qui recevait des données de marché mises à jour et gérait ce qui avait changé entre la session de trading précédente et celle du jour, par exemple des changements de nom de valeur (de PCLN à BKNG) ou des changements de catégorie dus à l’évolution de la capitalisation boursière
C’étaient des tâches que le système temps réel ne traitait pas, mais qui survenaient trop souvent ou étaient trop délicates pour être gérées manuellement. L’entreprise avait bien une UI desktop pour les traders, mais pas de notion d’UI serveur, et les serveurs étaient headless
Il n’y avait pas de développeur frontend ; les programmeurs backend, systèmes et data touchaient parfois au frontend, donc les UI web étaient très simples ou adaptées à un usage très spécifique, sans outils communs
Si cela avait été en 2023, j’aurais peut-être choisi create-react-app ou next.js, mais comme je voulais pouvoir y accéder facilement même via une connexion SSH médiocre sur une 4G partagée pendant une astreinte, j’ai exclu le forwarding X11 et RDP. J’ai donc cherché un générateur de TUI utilisable en Java, le langage du projet
Ce que j’aimais avec Lanterna, c’est qu’il disposait d’une implémentation basée sur Swing, ce qui permettait de l’exécuter directement dans IntelliJ et d’itérer rapidement, tout en pouvant en production lancer le terminal en SSH sur la machine hébergeant le serveur
Je compte continuer à suivre Textual pour voir si je peux en faire quelque chose de bien. Je n’aime toujours pas beaucoup les apps web : j’ai l’impression qu’elles demandent beaucoup plus d’efforts pour obtenir un résultat que des produits fonctionnellement équivalents en TUI ou en GUI desktop, hors navigateur
Malheureusement, l’expression « développement rapide d’applications » semble aussi s’appliquer à la bibliothèque elle-même
Il y a une nouvelle version toutes les deux semaines, et ça casse à des endroits assez difficiles à prévoir. Il est facile de faire un prototype avec Textual, mais la maintenance ensuite est difficile
Cela dit, tant que nous sommes encore en version 0.x, nous essayons de tirer parti de la possibilité de faire évoluer légèrement la direction quand une meilleure approche devient évidente dans certains domaines
À chaque nouvelle version, nous faisons de notre mieux pour rendre les changements cassants aussi visibles que possible. Si certains points sont difficiles à contourner ou à refaire fonctionner, vous pouvez demander de l’aide via une issue GitHub, les discussions, ou sur Discord si vous préférez
Je ne suis pas un développeur très expérimenté en Python, donc je me demande : à quel point est-il facile d’en faire un binaire sans grosses dépendances ?
Je cherche quelque chose qui aide à créer des packages d’installation produit pour Windows et Linux. Avant et après l’installation du logiciel chez les clients, il faut effectuer des tâches de configuration comme écrire des fichiers INI, vérifier la connexion à la DB, vérifier un serveur HTTP, etc.
Ça a l’air bien. Je viens de créer une app interne de DevOps et de gestion du changement avec unicurses et Python ; elle fonctionne, mais elle ne sera probablement pas très extensible
Au début, j’ai essayé TK et QT, mais les deux avaient des particularités à l’installation initiale. QT fonctionne bien, mais manque plutôt de documentation utile
Textual semble correspondre exactement aux besoins, donc je compte vraiment l’essayer
J’ai parcouru rapidement https://textual.textualize.io/tutorial/ et https://github.com/Textualize/textual/blob/main/docs/example...
Je me demande ce que les gens ont utilisé avec succès côté Go. Ce qui rend Textualize attirant, c’est qu’il donne une impression assez proche d’un navigateur web, et qu’il gère proprement jusqu’aux vues de tableaux défilants
tviewa aussi l’air intéressant, mais si l’on regarde par exemplebrew install dbui, cela donne davantage l’impression d’écrire soi-même une gestion impérative du typeif KeyPress.A: do_something()que d’utiliser une navigation déclarative et imbriquéeC’est peut-être la différence entre une perspective centrée application/SPA où « l’on contrôle tout », et une perspective centrée document où « l’on ajoute des composants à la page et on les laisse se disposer ». Je serais curieux d’avoir des retours sur les éléments de cette liste : https://codeberg.org/tecras/awesome-go#advanced-console-uis
if KeyPress.A: do_something()», cela signifie-t-il qu’au lieu de cacher la boucle de messages comme c’est la mode actuellement, on vous laisse réellement la contrôler ?https://github.com/gizak/termui
Lazarus/Freepascal est la bonne réponse. Le reste ressemble presque à une régression
Ces animations et transitions sont-elles implémentées uniquement avec du texte ASCII pur ?
Plus sérieusement, les fonctions d’« easing » et de transition valent le coup d’œil. Un délai d’environ 500 ms agace les utilisateurs expérimentés, mais il semble utile pour fournir du contexte pendant qu’on apprend la navigation dans l’app
Je me demande comment ce genre de projet peut durer
Ce projet est en développement depuis deux ans, mais je ne vois pas de source de revenus. Je me demande si les développeurs sont rémunérés d’une manière ou d’une autre
https://www.willmcgugan.com/blog/tech/post/from-open-source-...
Il faut aussi tenir compte du marché. En 2023, il n’y a littéralement presque personne qui soit prêt à payer pour utiliser une bibliothèque de widgets de terminal