7 Dinge, die ich beim Aufbau eines modernen TUI-Frameworks gelernt habe
Terminals sind schnell
- Moderne Terminal-Emulatoren sind hochentwickelte Software
- Mit hardwarebeschleunigtem Rendering lässt sich Bildschirmflackern reduzieren
- Drei Tricks, um Flackern zu verringern:
- Den Bildschirm nicht löschen, sondern überschreiben
- In einem Rutsch auf die Standardausgabe schreiben
- Das Protokoll für synchronisierte Ausgabe verwenden
- Textual nutzt standardmäßig 60 fps und bietet dadurch flüssige Animationen
DictViews sind erstaunlich
- Die Methoden
keys() und items() von Python-dicts geben KeysView bzw. ItemsView zurück
- Mit der symmetrischen Differenz von
ItemsView-Objekten lassen sich geänderte Einträge leicht finden
- In Textual wird das bei Änderungen von CSS-Eigenschaften für optimierte Updates verwendet
lru_cache ist schnell
- Der Decorator
@lru_cache aus dem Modul functools cached die Rückgabewerte von Funktionen
- In Textual wird
@lru_cache bei kleinen Funktionen eingesetzt, die häufig aufgerufen werden, um die Performance zu verbessern
- Man sollte die Cache-Informationen (
cache_info()) prüfen, um zu sehen, ob das Caching effektiv ist
Unveränderliche Objekte sind am besten
- Mit Python-Tupeln,
NamedTuples oder frozen dataclasses kann man die Vorteile unveränderlicher Objekte nutzen
- Unveränderliche Objekte erleichtern das Schreiben von Code ohne Seiteneffekte und machen Tests sowie Caching einfacher
Unicode-Art ist nützlich
- Diagramme mit Unicode-Rahmenzeichen sind für die Dokumentation sehr nützlich
- In Kombination mit gut geschriebenen Docstrings ist das besonders hilfreich
Brüche sind präzise
- Das Modul
fractions in Python hilft, Gleitkommafehler zu vermeiden
- In Textual werden Brüche verwendet, um den Bildschirm proportional aufzuteilen und so ein präzises Layout umzusetzen
Emojis sind schrecklich
- Die Emoji-Unterstützung im Terminal ist unvorhersehbar und komplex
- Die Breite von Emojis wird zwar über die Unicode-Datenbank geprüft, aber neuere Emojis können unvorhersehbare Ergebnisse verursachen
- Emojis aus mehreren Codepoints führen zu noch größeren Problemen
Zusammenfassung von GN⁺
- Der Artikel bietet nützliche Tipps und Tricks für die Entwicklung von Terminal-Anwendungen in Python
- Er teilt praxisnahe Ratschläge aus der Entwicklung des Textual-Frameworks
- Er erklärt, wie man mit komplexen Problemen wie Emojis umgeht, und ist damit für Entwickler hilfreich
- Ähnliche Projekte mit vergleichbarem Funktionsumfang sind
urwid und prompt_toolkit
1 Kommentare
Hacker-News-Kommentare
TUI-Entwickler müssen Unicode, internationale Zeichen und die Verarbeitung von Emojis als separates Projekt behandeln
Es stört, dass Textual React nachahmen will
Nach dem Ausprobieren von Textual stellte sich heraus, dass man CSS verwenden muss
Dieses TUI sieht hübsch aus, aber ich kann mir keine reale Situation vorstellen, in der ich es nutzen würde
kitty bietet mehr Funktionen
Ich verstehe nicht, warum Softwareingenieure sich so sehr für TUIs interessieren
Monodraw ist zwar nur für MacOS, aber es gibt auch auf anderen Plattformen gute Alternativen
„Überschreiben, nicht löschen“ war früher die Art, wie Spiele entwickelt wurden
Es gibt eine Methode, die Unicode-Version abzuschätzen, indem man die Cursorposition im Terminal prüft
Nach der Bewertung mehrerer TUI-Bibliotheken war FTXUI am einfachsten zu benutzen und am zuverlässigsten