Textual – Framework für schnelle Anwendungsentwicklung mit Python
(github.com/Textualize)- Textual ist ein Framework, mit dem sich über eine einfache Python-API plattformübergreifende Benutzeroberflächen erstellen und Apps im Terminal oder im Webbrowser ausführen lassen
- Die API kombiniert modernes Python mit Entwicklungen aus der Webentwicklung und unterstützt durch getrennte Komponenten sowie ein fortschrittliches Testing-Framework die langfristige Wartbarkeit
- Die Widget-Bibliothek bietet Buttons, Tree-Controls, Datentabellen, Eingabefelder, Textbereiche und mehr sowie ein flexibles Layout-System und vordefinierte Themes
- Intern ist es ein asynchrones Framework; es kann bei Bedarf mit async-Bibliotheken integriert werden, erzwingt deren Nutzung aber nicht
- Installation mit
pip install textual textual-dev; die Demo lässt sich mitpython -m textualausführen- Ohne Installation kann die textual demo mit
uvx --python 3.12 textual-demogestartet werden; dafür ist uv erforderlich
- Ohne Installation kann die textual demo mit
- Das Paket
textual-devbietet eine Entwicklungskonsole, die sich von einem anderen Terminal aus mit der Anwendung verbindet und das Anzeigen von Systemmeldungen, Events, Log-Nachrichten undprint-Ausgaben unterstützt - Textual-Apps bieten eine Befehlspalette mit Fuzzy-Suche, die sich mit
ctrl+pöffnen und um benutzerdefinierte Befehle für die Anwendung erweitern lässt - Mit
textual serve "python -m textual"kann eine Textual-App im Web bereitgestellt werden; Textual Web unterstützt neben lokalem Serving auch das Bereitstellen von Anwendungen - Textual-Apps haben geringe Systemanforderungen, lassen sich überall installieren, wo Python läuft, und benötigen keinen Desktop
1 Kommentare
Hacker-News-Meinungen
Meine derzeit liebste Textual-Demo ist https://github.com/1j01/textual-paint
Das ist ein ziemlich guter Microsoft-Paint-Klon, der im Terminal läuft.
Eines der ersten Dinge, die ich in ein neues Python-Projekt aufgenommen habe, war https://github.com/Textualize/rich
Ich habe es gewählt, weil es so einfach ist, Terminal-Ausgaben ansprechend aussehen zu lassen.
Rich dagegen ist großartig und macht den Entwicklungsfluss sehr angenehm. Mir gefällt, dass es eine gute API gibt, mit der man Dinge wie Fettdruck, Farben, Emojis und Tabellen direkt nutzen kann.
Sieht ziemlich cool aus.
Bei einer früheren Trading-Firma habe ich lanterna (https://github.com/mabe02/lanterna/tree/master) verwendet, um Text-UIs für wichtige Prozesse zu bauen. Es ging um einen Prozess, der aktualisierte Marktdaten einlas und Änderungen zwischen der vorherigen Handelssitzung und dem heutigen Tag verarbeitete, etwa Umbenennungen von Tickersymbolen (PCLN zu BKNG) oder Kategorieänderungen durch veränderte Marktkapitalisierung.
Das waren Aufgaben, die das Echtzeitsystem nicht erledigte, die aber zu häufig auftraten oder für manuelle Bearbeitung zu umständlich waren. Das Unternehmen hatte zwar Desktop-UIs für Trading-Mitarbeiter, aber kein Konzept einer Server-UI, und die Server liefen headless.
Es gab keine Frontend-Entwickler; Backend-, System- und Daten-Programmierer fassten gelegentlich das Frontend an. Entsprechend waren die Web-UIs sehr schlicht oder auf konkrete Zwecke zugeschnitten, und gemeinsame Tools gab es auch nicht.
Wäre es 2023 gewesen, hätte ich mich vielleicht für create-react-app oder next.js entschieden. Weil ich aber auch während des On-Call-Dienstes über eine schlechte SSH-Verbindung per angebundenem 4G leicht darauf zugreifen wollte, kamen X11-Forwarding oder RDP nicht infrage. Also suchte ich nach einem TUI-Builder, den man in der Projektsprache Java verwenden konnte.
Lanterna gefiel mir, weil es eine Swing-basierte Implementierung hat: Man kann es direkt in IntelliJ ausführen und schnell iterieren, während man in der Produktionsumgebung per SSH auf der Maschine mit dem Server im Terminal arbeiten konnte.
Ich werde Textual weiter im Blick behalten und sehen, ob sich damit etwas Brauchbares bauen lässt. Web-Apps mag ich immer noch nicht besonders, weil es sich so anfühlt, als bräuchte man im Vergleich zu funktional gleichwertigen Produkten als TUI oder Desktop-GUI deutlich mehr Aufwand, um zu Ergebnissen zu kommen.
Leider scheint der Ausdruck „Rapid Application Development“ auch auf die Bibliothek selbst zuzutreffen.
Alle zwei Wochen erscheint ein neues Release, und Dinge brechen an teils schwer vorhersehbaren Stellen. Mit Textual ist es leicht, einen Prototyp zu bauen, aber die spätere Wartung ist schwierig.
Solange wir aber noch bei Version 0.x sind, nutzen wir bewusst den Vorteil, die Richtung etwas ändern zu können, wenn sich in bestimmten Bereichen klar bessere Ansätze abzeichnen.
Bei neuen Releases versuchen wir, Breaking Changes so gut sichtbar wie möglich zu kommunizieren. Wenn es Stellen gibt, bei denen ein Workaround schwierig ist oder die sich nur schwer wieder zum Laufen bringen lassen, kann man in GitHub-Issues, Diskussionen oder, wenn gewünscht, auch auf Discord um Hilfe bitten.
Ich bin kein Entwickler mit viel Python-Erfahrung, deshalb frage ich: Wie einfach ist es, daraus ohne große Abhängigkeiten ein Binary zu bauen?
Ich suche etwas, das beim Erstellen von Installationspaketen für Windows- und Linux-Produkte hilft. Vor oder nach der Installation der Software beim Kunden sind Konfigurationsaufgaben nötig, etwa INI-Dateien schreiben, DB-Verbindungen prüfen oder HTTP-Server überprüfen.
Sieht gut aus. Ich habe gerade mit unicurses und Python eine interne App für DevOps und Change Management gebaut; sie funktioniert, dürfte aber nicht besonders gut skalieren.
Anfangs habe ich TK und QT ausprobiert, aber beide hatten Eigenheiten bei der Ersteinrichtung. QT funktioniert zwar gut, aber hilfreiche Dokumentation ist eher knapp.
Textual scheint genau zu meinen Anforderungen zu passen, deshalb werde ich es auf jeden Fall ausprobieren.
Ich habe es grob überflogen und mir https://textual.textualize.io/tutorial/ sowie https://github.com/Textualize/textual/blob/main/docs/example... angesehen.
Mich würde interessieren, was ihr auf der Go-Seite erfolgreich eingesetzt habt. Textualize ist attraktiv, weil es sich ziemlich wie ein Webbrowser anfühlt und sogar scrollbare Tabellenansichten sauber wirken.
tviewsieht ebenfalls interessant aus, aber wenn man sich zum Beispielbrew install dbuianschaut, fühlt es sich stärker nach direkter imperativer Behandlung à laif KeyPress.A: do_something()an als nach deklarativer, verschachtelter Navigation.Vielleicht ist es auch der Unterschied zwischen einer anwendungszentrierten/SPA-Sicht, die „alles kontrolliert“, und einer dokumentzentrierten Sicht, bei der man „Komponenten zur Seite hinzufügt und sie fließen lässt“. Mich würde Feedback zu den Einträgen in dieser Liste interessieren: https://codeberg.org/tecras/awesome-go#advanced-console-uis
if KeyPress.A: do_something()“, dass es die Message Loop nicht wie heute üblich versteckt, sondern einen sie tatsächlich steuern lässt?https://github.com/gizak/termui
Lazarus/Freepascal ist die richtige Antwort. Alles andere ist fast schon ein Rückschritt.
Sind solche Animationen und Übergänge nur mit reinem ASCII-Text umgesetzt?
Ernsthaft: Die „Easing“- und Übergangsfunktionen sollte man sich einmal ansehen. Eine Verzögerung von etwa 500 ms ist für geübte Nutzer störend, scheint aber zu helfen, Kontext zu vermitteln, während man die Navigation in der App lernt.
Ich frage mich, wie solche Projekte weiterbestehen.
Dieses Projekt wird seit zwei Jahren entwickelt, aber eine Einnahmequelle ist nicht erkennbar. Ich frage mich, ob die Entwickler in irgendeiner Form entlohnt werden.
https://www.willmcgugan.com/blog/tech/post/from-open-source-...
Man muss auch den Markt berücksichtigen: 2023 gibt es buchstäblich kaum jemanden, der Geld dafür zahlen würde, eine Terminal-Widget-Bibliothek zu verwenden.