Web Analytics

AppCUI-rs

⭐ 376 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 zum Erstellen moderner, textbasierter Benutzeroberflächen (TUIs) mit umfangreichen Widgets, Themes und vollständiger Unicode-Unterstützung—eine Alternative zu ncurses und anderen Terminal-UI-Frameworks.

✨ Funktionen

  • [x] zahlreiche sofort einsatzbereite Steuerelemente (Buttons, Labels, Textfelder, Kontrollkästchen, Optionsfelder, Listenansichten, Baumansichten, Kombinationsfelder, Datum-/Zeitwähler, Farbwähler, Registerkarten, Akkordeons usw.). Eine vollständige Liste der Steuerelemente finden Sie hier
  • [x] leistungsfähiges Layout-System, das die Platzierung von Steuerelementen mittels absoluter Koordinaten, relativer Koordinaten, Docking, Ausrichtung, Anker oder Pivot-Positionierung ermöglicht (siehe mehr hier)
  • [x] Menüs und Werkzeugleisten
  • [x] Multi-Plattform-Unterstützung (Windows via API und virtuellem Terminal, Linux via ncurses, macOS via termios)
  • [x] Multi-Threading-Unterstützung für Hintergrundaufgaben
  • [x] Timer
  • [x] Mausunterstützung
  • [x] Zwischenablage-Unterstützung
  • [x] Farbthemen
  • [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 je nach Betriebssystem:

  • Windows-Konsole – basierend auf der Win32 Low-Level-API, entwickelt für die klassische Windows-Konsole
  • Windows VT – basierend auf ANSI-Sequenzen, entwickelt für moderne Windows-Virtual-Terminals
  • NCurses – basierend auf der NCurses-API für Linux-Umgebungen
  • Termios – basierend auf ANSI-Sequenzen und Low-Level-APIs für macOS
  • Web-Terminal – entwickelt für Web-Implementierungen (basiert auf WebGL)
  • CrossTerm – basiert auf dem crossterm-Crate, aktiviert über ein Feature-Flag
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(()) }


Führen Sie dann 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, die Ihnen den Einstieg erleichtern. Sie finden sie im Ordner examples, darunter:

🛠️ Ein komplexeres Beispiel

Ein Beispiel, das ein Fenster mit einem Button erstellt, 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