AppCUI-rs

AppCUI-rs is een snelle, cross-platform Rust bibliotheek voor het bouwen van moderne, tekstgebaseerde gebruikersinterfaces (TUIs) met rijke widgets, thema's en volledige Unicode-ondersteuning—een alternatief voor ncurses en andere terminal UI frameworks.
✨ Functies
- [x] meerdere kant-en-klare controls (knoppen, labels, tekstvakken, selectievakjes, keuzerondjes, lijstweergaven, boomstructuren, comboboxen, datum/tijd-kiezers, kleurkiezers, tabbladen, accordeons, enz.). Een volledige lijst van controls vind je hier
- [x] krachtig lay-outsysteem waarmee je controls kunt positioneren met absolute coördinaten, relatieve coördinaten, docking, uitlijning, ankers of pivot-positionering (meer info hier)
- [x] menu's en werkbalken
- [x] multi-platform ondersteuning (Windows via API en virtuele terminal, Linux via ncurses, MacOS via termios)
- [x] multi-threading ondersteuning voor achtergrondtaken
- [x] timers
- [x] muisondersteuning
- [x] klembordondersteuning
- [x] kleurthema's
- [x] ondersteuning voor Unicode-tekens
- [x] vooraf gedefinieerde dialogen (berichtvenster, invoerveld, kleurkiezer, opslaan & openen dialogen, mapnavigatie, enz.)
- [x] ondersteuning voor ware kleuren (24 bits per pixel) voor terminals die dit ondersteunen.
📸 Screenshots

👉 Bekijk de Galerij voor volledige demo's van alle controls!
🖥️ Backends
AppCUI ondersteunt verschillende backends afhankelijk van het besturingssysteem waarop het wordt gebruikt:
- Windows Console - gebaseerd op de Win32 low-level API, ontworpen voor de klassieke Windows-console
- Windows VT - gebaseerd op ANSI-sequenties, ontworpen voor moderne Windows-virtuele terminals
- NCurses - gebaseerd op de NCurses API voor Linux-omgevingen
- Termios - gebaseerd op ANSI-sequenties en low-level API's voor MAC OSX
- Web Terminal - ontworpen voor webimplementatie (gebaseerd op webgl)
- CrossTerm - gebaseerd op de crossterm
crate, maar ingeschakeld via een feature flag
🚀 Snel van start
Voeg het volgende toe aan je Cargo.toml:
toml
[dependencies]
appcui = "*"
Maak vervolgens een nieuw Rust-project aan en voeg de volgende code toe: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(()) }
of een compactere versie met behulp van proc-macro's: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::*;Voer vervolgens het project uit metcargo run. Je zou een venster moeten zien met de titelTesten de tekstHello World !in het midden.🧪 Voorbeelden
AppCUI-rs wordt geleverd met een reeks voorbeelden om je op weg te helpen. Je kunt ze vinden in de map examples, waaronder:
- Spellen zoals Tic Tac Toe, Snake, Flappy Bird, Mijnenveger, Ram it, PacMan, Chees, Connect Four, 2048 of Tetris
- Hulpprogramma’s zoals Rekenmachine, CSV Viewer, Temperatuur Omzetter of een Timer
- Animaties zoals Matrix, Fractals of Spiraal
- Besturingselementen/Widgets zoals Button, CheckBox, ComboBox, DatePicker, ListView, TreeView en nog veel meer.
- Dialoogvensters zoals Notificatie of Invoer
🛠️ Een complexer voorbeeld
Een voorbeeld dat een venster maakt met een knop die, wanneer erop wordt gedrukt, een teller verhoogt.
// 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(()) } ``
🛣️ Routekaart
- [x] Basisset van widgets en ondersteuning voor Windows, Linux en MacOS
- [x] WebGL-ondersteuning
- [ ] OpenGL / SDL / Vulkan-ondersteuning
- [ ] TextArea-ondersteuning voor code-highlighting
🤝 Bijdragen
Bijdragen, issues en functieverzoeken zijn welkom! Bekijk CONTRIBUTING.md om aan de slag te gaan.
Doe mee aan de discussie in GitHub Discussions.
--- Tranlated By Open Ai Tx | Last indexed: 2026-02-09 ---