6 Punkte von GN⁺ 2023-08-20 | 1 Kommentare | Auf WhatsApp teilen
  • 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 mit python -m textual ausführen
    • Ohne Installation kann die textual demo mit uvx --python 3.12 textual-demo gestartet werden; dafür ist uv erforderlich
  • Das Paket textual-dev bietet eine Entwicklungskonsole, die sich von einem anderen Terminal aus mit der Anwendung verbindet und das Anzeigen von Systemmeldungen, Events, Log-Nachrichten und print-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

 
GN⁺ 2023-08-20
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.

    • Ich baue gern Kommandozeilen-Tools und mag auch das Aussehen von Textual, aber nach ein paar Versuchen war es mir etwas zu schwergewichtig und zu wenig flexibel.
      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 wirklich hübsch aus; ich frage mich, ob es ähnliche Bibliotheken auch für Go oder Rust gibt.
  • 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.

    • Ich verstehe, dass das nerven kann. Ich warte selbst Code, der mit Textual geschrieben wurde, und kenne das nur zu gut.
      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.

    • Es gibt viele Optionen, aber nach meiner Erfahrung war PyInstaller in diesem Bereich am einfachsten.
  • 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.
    tview sieht ebenfalls interessant aus, aber wenn man sich zum Beispiel brew install dbui anschaut, fühlt es sich stärker nach direkter imperativer Behandlung à la if 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

    • Bedeutet „direkte imperative Behandlung à la if KeyPress.A: do_something()“, dass es die Message Loop nicht wie heute üblich versteckt, sondern einen sie tatsächlich steuern lässt?
    • Bubble Tea ist hervorragend.
    • Ich habe in einem Projekt termui verwendet und hatte nichts daran auszusetzen.
      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?

    • Genau genommen ist es Unicode-Text, aber ja. Es ist alles Text.
    • Ja, sie haben es geschafft, das Terminal langsam wirken zu lassen /s
      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.

    • Dieses Projekt hat Seed-Finanzierung erhalten. Der Gründer von Textual hat dazu einen Blogbeitrag geschrieben, der lesenswert ist.
      https://www.willmcgugan.com/blog/tech/post/from-open-source-...
    • Die große Mehrheit der Open-Source-Projekte wird als Hobby entwickelt und gepflegt oder als Nebenprojekt im Zusammenhang mit anderer bezahlter Arbeit betrieben.
      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.