Web Analytics

AppCUI-rs

⭐ 358 stars German by gdt050579

🌐 Sprache

AppCUI-rs

`` ⯈ 𝗔𝗽𝗽𝗖𝗨𝗜-𝗿𝘀 🖳


Windows Build Status
Linux Build Status
MacOS Build Status
Code Coverage
License
Crates.io
Docs.rs
Gallery

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
Weitere Informationen zu den unterstützten Backends finden Sie hier

🚀 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(()) }


Dann führen Sie das Projekt mit cargo run aus. Sie sollten ein Fenster mit dem Titel Test und dem Text Hello 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:

🛠️ Ein komplexeres Beispiel

Ein Beispiel, das ein Fenster erstellt, mit einem Button, der beim Drücken einen Zähler erhöht.

rust use appcui::prelude::*;

// 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