AppCUI-rs

AppCUI-rs é uma biblioteca Rust rápida e multiplataforma para construir interfaces de usuário modernas baseadas em texto (TUIs) com widgets ricos, temas e suporte total a Unicode—uma alternativa ao ncurses e outros frameworks de UI para terminal.
✨ Funcionalidades
- [x] múltiplos controles prontos para uso (botões, rótulos, caixas de texto, caixas de seleção, botões de rádio, listas, árvores, combos, seletores de data/hora, seletores de cor, abas, acordeões, etc.). Uma lista completa de controles pode ser encontrada aqui
- [x] sistema de layout poderoso que permite posicionar controles usando coordenadas absolutas, relativas, dock, alinhamento, âncoras ou posicionamento por pivô (veja mais aqui)
- [x] menus e barras de ferramentas
- [x] suporte multiplataforma (Windows via API e terminal virtual, Linux via ncurses, MacOS via termios)
- [x] suporte a multi-threading para tarefas em segundo plano
- [x] timers
- [x] suporte a mouse
- [x] suporte a área de transferência
- [x] temas de cores
- [x] suporte a caracteres Unicode
- [x] diálogos predefinidos (caixa de mensagem, caixa de entrada, seletor de cor, diálogos de salvar & abrir, navegador de pastas, etc)
- [x] suporte a cores reais (24 bits por pixel) para terminais compatíveis.
📸 Capturas de Tela

👉 Confira a Galeria para demonstrações completas de todos os controles!
🖥️ Backends
AppCUI suporta vários backends baseados no sistema operacional em que está sendo utilizado:
- Console do Windows - baseado na API de baixo nível Win32, projetado para o console clássico do Windows
- Windows VT - baseado em sequências ANSI, projetado para terminais virtuais modernos do Windows
- NCurses - baseado na API NCurses para ambientes Linux
- Termios - baseado em sequências ANSI e APIs de baixo nível para MAC OSX
- Terminal Web - projetado para implementação na Web (baseado em webgl)
- CrossTerm - baseado no crate crossterm
, mas habilitado via uma flag de recurso
🚀 Início Rápido
Adicione o seguinte ao seu Cargo.toml:
toml
[dependencies]
appcui = "*"
Em seguida, crie um novo projeto Rust e adicione o seguinte código: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 uma versão mais compacta usando 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::*;Em seguida, execute o projeto comcargo run. Você deverá ver uma janela com o títuloTeste o textoHello World !no centro.🧪 Exemplos
O AppCUI-rs vem com um conjunto de exemplos para ajudá-lo a começar. Você pode encontrá-los na pasta examples, incluindo:
- Jogos como Jogo da Velha, Cobra, Flappy Bird, Campo Minado, Ram it, PacMan, Chees, Connect Four, 2048 ou Tetris
- Utilitários como Calculadora, Visualizador de CSV, Conversor de Temperatura ou um Timer
- Animações como Matrix, Fractais ou Espiral
- Controles/Widgets como Botão, CheckBox, ComboBox, DatePicker, ListView, TreeView e muitos outros.
- Diálogos como Notificação ou Entrada
🛠️ Um exemplo mais complexo
Um exemplo que cria uma janela com um botão que, quando pressionado, aumenta um contador.
// 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(()) } ``
🛣️ Roteiro
- [x] Conjunto básico de widgets e suporte para Windows, Linux e MacOS
- [x] Suporte a WebGL
- [ ] Suporte a OpenGL / SDL / Vulkan
- [ ] Suporte a TextArea para destaque de código
🤝 Contribuindo
Contribuições, problemas e solicitações de recursos são bem-vindos! Confira CONTRIBUTING.md para começar.
Participe da discussão em GitHub Discussions.
--- Tranlated By Open Ai Tx | Last indexed: 2026-02-09 ---