AppCUI-rs

AppCUI-rs è una libreria Rust veloce e multipiattaforma per costruire moderne interfacce utente testuali (TUI) con widget avanzati, temi e pieno supporto Unicode—un’alternativa a ncurses e altri framework di interfaccia terminale.
✨ Caratteristiche
- [x] numerosi controlli pronti all’uso (bottoni, etichette, caselle di testo, check box, radio button, list view, tree view, combo box, selettori data/ora, selettori colore, tab, accordeon, ecc.). Un elenco completo dei controlli è disponibile qui
- [x] potente sistema di layout che permette di posizionare i controlli tramite coordinate assolute, relative, docking, allineamento, ancore o posizionamento pivot (vedi dettagli qui)
- [x] menu e barre degli strumenti
- [x] supporto multipiattaforma (Windows tramite API e terminale virtuale, Linux tramite ncurses, MacOS tramite termios)
- [x] supporto multithreading per consentire task in background
- [x] timer
- [x] supporto mouse
- [x] supporto clipboard
- [x] temi colore
- [x] supporto caratteri Unicode
- [x] dialoghi predefiniti (messaggi, input box, selettore colori, dialoghi salva e apri, navigatore cartelle, ecc)
- [x] supporto colori reali (24 bit per pixel) per i terminali che lo supportano.
📸 Screenshot

👉 Scopri la Galleria per le demo complete di tutti i controlli!
🖥️ Backend
AppCUI supporta diversi backend in base al sistema operativo su cui viene utilizzato:
- Console di Windows - basata sulle API di basso livello Win32, progettata per la console classica di Windows
- Windows VT - basata su sequenze ANSI, progettata per i terminali virtuali moderni di Windows
- NCurses - basata sull'API NCurses per ambienti Linux
- Termios - basata su sequenze ANSI e API di basso livello per MAC OSX
- Web Terminal - progettata per implementazioni Web (basata su webgl)
- CrossTerm - basata sul crate crossterm
, ma abilitata tramite una feature flag
🚀 Avvio rapido
Aggiungi quanto segue al tuo Cargo.toml:
toml
[dependencies]
appcui = "*"
Quindi crea un nuovo progetto Rust e aggiungi il seguente codice:
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(()) }
oppure una versione più compatta utilizzando i proc-macro:
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::*;Quindi esegui il progetto concargo run. Dovresti vedere una finestra con il titoloTeste il testoHello World !al centro.🧪 Esempi
AppCUI-rs include una serie di esempi per aiutarti a iniziare. Puoi trovarli nella cartella examples, inclusi:
- Giochi come Tris, Snake, Flappy Bird, Prato fiorito, Ram it, PacMan, Chees, Forza Quattro, 2048 o Tetris
- Utility come Calcolatrice, Visualizzatore CSV, Convertitore di temperatura o un Timer
- Animazioni come Matrix, Frattali o Spirale
- Controlli/Widget come Bottone, CheckBox, ComboBox, DatePicker, ListView, TreeView e molti altri.
- Finestre di dialogo come Notifica o Input
🛠️ Un esempio più complesso
Un esempio che crea una finestra con un pulsante che, quando premuto, incrementa un contatore.
// 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(()) } ``
🛣️ Roadmap
- [x] Set di widget di base e supporto per Windows, Linux e MacOS
- [x] Supporto WebGL
- [ ] Supporto OpenGL / SDL / Vulkan
- [ ] Supporto TextArea per evidenziazione del codice
🤝 Contributi
Contributi, segnalazioni e richieste di funzionalità sono benvenuti! Consulta CONTRIBUTING.md per iniziare.
Partecipa alla discussione in GitHub Discussions.
--- Tranlated By Open Ai Tx | Last indexed: 2026-02-09 ---