🌐 Sprache
AppCUI-rs

AppCUI-rs ist eine schnelle, plattformübergreifende Rust-Bibliothek zur Erstellung moderner, textbasierter Benutzeroberflächen (TUIs) mit umfangreichen Widgets, Themes und voller Unicode-Unterstützung—eine Alternative zu ncurses und anderen Terminal-UI-Frameworks.
✨ Funktionen
- [x] mehrere sofort einsatzbereite Steuerelemente (Buttons, Labels, Textfelder, Checkboxen, Radiobuttons, Listenansichten, Baumansichten, Kombinationsfelder, Datums-/Zeitwähler, Farbwähler, Tabs, Akkordeons usw.). Eine vollständige Liste der Steuerelemente finden Sie hier
- [x] leistungsstarkes Layout-System, das es ermöglicht, Steuerelemente mit absoluten Koordinaten, relativen Koordinaten, Docking, Ausrichtung, Ankern oder Pivot-Positionierung zu platzieren (mehr dazu hier)
- [x] Menüs und Werkzeugleisten
- [x] Multi-Plattform-Unterstützung (Windows über API und virtuelles Terminal, Linux über ncurses, MacOS über termios)
- [x] Multithreading-Unterstützung für Hintergrundaufgaben
- [x] Timer
- [x] Mausunterstützung
- [x] Zwischenablage-Unterstützung
- [x] Farb-Themes
- [x] Unterstützung für Unicode-Zeichen
- [x] vordefinierte Dialoge (Meldungsbox, Eingabebox, Farbwähler, Speichern- & Öffnen-Dialoge, Ordnernavigator usw.)
- [x] True-Color-Unterstützung (24 Bit pro Pixel) für Terminals, die dies unterstützen.
📸 Screenshots

👉 Schauen Sie sich die Galerie für vollständige Demos aller Steuerelemente an!
🖥️ Backends
AppCUI unterstützt verschiedene Backends, abhängig vom verwendeten Betriebssystem:
- Windows-Konsole - basiert auf der Win32 Low-Level-API, entwickelt für klassische Windows-Konsolen
- Windows VT - basiert auf ANSI-Sequenzen, entwickelt für moderne Windows-Virtual-Terminals
- NCurses - basiert auf der NCurses-API für Linux-Umgebungen
- Termios - basiert auf ANSI-Sequenzen und Low-Level-APIs für MAC OSX
- Web-Terminal - entwickelt für Web-Implementierungen (basiert auf WebGL)
- CrossTerm - basiert auf dem crossterm
-Crate, aber über ein Feature-Flag aktiviert
🚀 Schnellstart
Fügen Sie Folgendes zu Ihrer Cargo.toml hinzu:
toml
[dependencies]
appcui = "*"
Erstellen Sie dann ein neues Rust-Projekt und fügen Sie den folgenden Code hinzu:rust
use appcui::prelude::*;fn main() -> Result<(), appcui::system::Error> { let mut app = App::new().build()?; let mut win = Window::new( "Test", LayoutBuilder::new().alignment(Alignment::Center).width(30).height(9).build(), window::Flags::Sizeable, ); win.add(Label::new( "Hello World !", LayoutBuilder::new().alignment(Alignment::Center).width(13).height(1).build(), )); app.add_window(win); app.run(); Ok(()) }
oder eine kompaktere Version unter Verwendung von Proc-Makros:rs
use appcui::prelude::*;fn main() -> Result<(), appcui::system::Error> { let mut app = App::new().build()?; let mut win = window!("Test,a:c,w:30,h:9"); win.add(label!("'Hello World !',a:c,w:13,h:1")); app.add_window(win); app.run(); Ok(()) }
rust use appcui::prelude::*;Dann führen Sie das Projekt mitcargo runaus. Sie sollten ein Fenster mit dem TitelTestund dem TextHello World !in der Mitte sehen.🧪 Beispiele
AppCUI-rs enthält eine Reihe von Beispielen, um Ihnen den Einstieg zu erleichtern. Sie finden diese im Ordner examples, darunter:
- Spiele wie Tic Tac Toe, Snake, Flappy Bird, Minesweeper, Ram it, PacMan, Chees, Connect Four, 2048 oder Tetris
- Dienstprogramme wie Rechner, CSV Viewer, Temperaturumrechner oder ein Timer
- Animationen wie Matrix, Fraktale oder Spirale
- Controls/Widgets wie Button, CheckBox, ComboBox, DatePicker, ListView, TreeView und viele mehr.
- Dialoge wie Benachrichtigung oder Eingabe
🛠️ Ein komplexeres Beispiel
Ein Beispiel, das ein Fenster erstellt, mit einem Button, der beim Drücken einen Zähler erhöht.
// Create a window that handles button events and has a counter #[Window(events = ButtonEvents)] struct CounterWindow { counter: i32 }
impl CounterWindow { fn new() -> Self { let mut w = Self { // set up the window title and position base: window!("'Counter window',a:c,w:30,h:5"), // initial counter is 1 counter: 1 }; // add a single button with the caption "1" (like the counter) w.add(button!("'1',d:b,w:20")); w } } impl ButtonEvents for CounterWindow { // When the button is pressed, this function will be called // with the handle of the button that was pressed // Since we only have one button, we don't need to store its handle // in the struct, as we will receive the handle via the on_pressed method fn on_pressed(&mut self, handle: Handle
fn main() -> Result<(), appcui::system::Error> { // create a new application let mut a = App::new().build()?; // add a new window (of type CounterWindow) to the application a.add_window(CounterWindow::new()); // Run AppCUI framework (this wil start the window loop and messaage passing) a.run(); Ok(()) } ``
🛣️ Fahrplan
- [x] Grundlegende Widget-Sammlung und Unterstützung für Windows, Linux und MacOS
- [x] WebGL-Unterstützung
- [ ] OpenGL- / SDL- / Vulkan-Unterstützung
- [ ] TextArea-Unterstützung für Syntaxhervorhebung
🤝 Beitrag leisten
Beiträge, Probleme und Feature-Anfragen sind willkommen! Schau dir CONTRIBUTING.md an, um loszulegen.
Beteilige dich an der Diskussion in GitHub Discussions.
--- Tranlated By Open Ai Tx | Last indexed: 2026-02-09 ---