AppCUI-rs

AppCUI-rs est une bibliothèque Rust rapide et multiplateforme pour créer des interfaces utilisateur modernes en mode texte (TUI) avec des widgets riches, des thèmes et une prise en charge complète d’Unicode—une alternative à ncurses et autres frameworks d’UI terminal.
✨ Fonctionnalités
- [x] nombreux contrôles prêts à l’emploi (boutons, labels, champs texte, cases à cocher, boutons radio, listes, arbres, boîtes combinées, sélectionneurs de date/heure, sélectionneurs de couleur, onglets, accordéons, etc.). La liste complète des contrôles se trouve ici
- [x] système de mise en page puissant permettant de positionner les contrôles avec des coordonnées absolues, relatives, docking, alignement, ancres ou positionnement par pivot (voir plus ici)
- [x] menus et barres d’outils
- [x] prise en charge multiplateforme (Windows via API et terminal virtuel, Linux via ncurses, macOS via termios)
- [x] prise en charge du multithreading pour permettre des tâches en arrière-plan
- [x] minuteurs
- [x] prise en charge de la souris
- [x] prise en charge du presse-papiers
- [x] thèmes de couleurs
- [x] prise en charge des caractères Unicode
- [x] dialogues prédéfinis (boîte de message, boîte de saisie, sélectionneur de couleur, dialogues d’enregistrement et d’ouverture, navigateur de dossiers, etc.)
- [x] prise en charge des couleurs vraies (24 bits par pixel) pour les terminaux compatibles.
📸 Captures d’écran

👉 Découvrez la Galerie pour des démonstrations complètes de tous les contrôles !
🖥️ Backends
AppCUI prend en charge différents backends selon le système d’exploitation :
- Console Windows - basé sur l'API bas niveau Win32, conçu pour la console classique de Windows
- Windows VT - basé sur les séquences ANSI, conçu pour les terminaux virtuels modernes de Windows
- NCurses - basé sur l'API NCurses pour les environnements Linux
- Termios - basé sur les séquences ANSI et les API bas niveau pour macOS
- Terminal Web - conçu pour les implémentations web (basé sur WebGL)
- CrossTerm - basé sur le crate crossterm
, activé via un drapeau 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 les 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::*;Exécutez ensuite le projet aveccargo run. Vous devriez voir une fenêtre avec le titreTestet le texteHello World !au centre.🧪 Exemples
AppCUI-rs est fourni avec un ensemble d'exemples pour vous aider à démarrer. Vous pouvez les trouver dans le dossier examples, notamment :
- Jeux tels que Tic Tac Toe, Snake, Flappy Bird, Démineur, Ram it, PacMan, Échecs, 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.
- Boîtes de dialogue telles que Notification ou Entrée
🛠️ Un exemple plus complexe
Un exemple qui crée une fenêtre avec un bouton qui, lorsqu'il est pressé, incrémente 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 will start the window loop and message passing) a.run(); Ok(()) } ``
🛣️ Feuille de route
- [x] Ensemble de widgets de base et prise en charge de Windows, Linux et macOS
- [x] Prise en charge WebGL
- [ ] Prise en charge OpenGL / SDL / Vulkan
- [ ] Prise en charge TextArea pour la coloration syntaxique
🤝 Contribution
Les contributions, problèmes et demandes de fonctionnalités sont les bienvenus ! Consultez CONTRIBUTING.md pour commencer.
Rejoignez la discussion sur GitHub Discussions.
--- Tranlated By Open Ai Tx | Last indexed: 2026-06-13 ---