AppCUI-rs

AppCUI-rs est une bibliothèque Rust rapide et multiplateforme pour construire des interfaces utilisateur modernes en mode texte (TUIs) avec des widgets riches, des thèmes, et un support complet de l’Unicode — une alternative à ncurses et autres frameworks d’interface terminale.
✨ Fonctionnalités
- [x] multiples contrôles prêts à l’emploi (boutons, étiquettes, zones de texte, cases à cocher, boutons radio, vues en liste, vues en arbre, boîtes combinées, sélecteurs de date/heure, sélecteurs de couleur, onglets, accordéons, etc.). Une liste complète des contrôles est disponible ici
- [x] système de disposition puissant permettant de positionner les contrôles avec des coordonnées absolues, coordonnées relatives, ancrage, alignement, ancres ou positionnement par pivot (voir plus ici)
- [x] menus et barres d’outils
- [x] support multiplateforme (Windows via API et terminal virtuel, Linux via ncurses, MacOS via termios)
- [x] support du multithreading pour permettre des tâches en arrière-plan
- [x] minuteurs
- [x] support de la souris
- [x] support du presse-papiers
- [x] thèmes de couleur
- [x] support des caractères Unicode
- [x] dialogues prédéfinis (boîte de message, boîte de saisie, sélecteur de couleur, dialogues de sauvegarde & ouverture, navigateur de dossiers, etc)
- [x] support des vraies couleurs (24 bits par pixel) pour les terminaux qui le supportent.
📸 Captures d’écran

👉 Découvrez la Galerie pour voir des démos complètes de tous les contrôles !
🖥️ Backends
AppCUI supporte plusieurs backends selon le système d’exploitation utilisé :
- Console Windows - basé sur l'API bas niveau Win32, conçu pour la console Windows classique
- Windows VT - basé sur les séquences ANSI, conçu pour les terminaux virtuels Windows modernes
- NCurses - basé sur l'API NCurses pour les environnements Linux
- Termios - basé sur les séquences ANSI et les API bas niveau pour MAC OSX
- Terminal Web - conçu pour une implémentation Web (basé sur webgl)
- CrossTerm - basé sur la crate crossterm
, mais activé via un flag de fonctionnalité
🚀 Démarrage rapide
Ajoutez ce qui suit à votre Cargo.toml :
toml
[dependencies]
appcui = "*"
Créez ensuite un nouveau projet Rust et ajoutez le code suivant :
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(()) }
ou une version plus compacte utilisant des proc-macros :
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::*;Ensuite, lancez le projet aveccargo run. Vous devriez voir une fenêtre avec le titreTestet le texteHello World !au centre.🧪 Exemples
AppCUI-rs est livré avec un ensemble d'exemples pour vous aider à démarrer. Vous pouvez les trouver dans le dossier examples, comprenant :
- Jeux tels que Tic Tac Toe, Snake, Flappy Bird, Démineur, Ram it, PacMan, Chees, Puissance 4, 2048 ou Tetris
- Utilitaires tels que Calculatrice, Visionneuse CSV, Convertisseur de température ou un Minuteur
- Animations telles que Matrix, Fractales ou Spirale
- Contrôles/Widgets tels que Bouton, Case à cocher, ComboBox, Sélecteur de date, ListView, TreeView et bien d'autres.
- Dialogues tels que Notification ou Saisie
🛠️ Un exemple plus complexe
Un exemple qui crée une fenêtre avec un bouton qui, lorsqu'il est pressé, augmente un compteur.
// 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(()) } ``
🛣️ Feuille de route
- [x] Ensemble de widgets de base et prise en charge de Windows, Linux et MacOS
- [x] Support WebGL
- [ ] Support OpenGL / SDL / Vulkan
- [ ] Support TextArea pour la mise en surbrillance du code
🤝 Contribution
Les contributions, problèmes et demandes de fonctionnalités sont les bienvenus ! Consultez CONTRIBUTING.md pour commencer.
Rejoignez la discussion dans GitHub Discussions.
--- Tranlated By Open Ai Tx | Last indexed: 2026-02-09 ---