AppCUI-rs

AppCUI-rs to szybka, wieloplatformowa biblioteka w języku Rust do tworzenia nowoczesnych, tekstowych interfejsów użytkownika (TUI) z zaawansowanymi widżetami, motywami i pełnym wsparciem Unicode—alternatywa dla ncurses i innych frameworków terminalowych UI.
✨ Funkcje
- [x] wiele gotowych do użycia kontrolek (przyciski, etykiety, pola tekstowe, pola wyboru, przyciski radiowe, widoki list, widoki drzewa, listy rozwijane, selektory daty/czasu, selektory kolorów, zakładki, akordeony itd.). Pełną listę kontrolek znajdziesz tutaj
- [x] zaawansowany system układu, pozwalający pozycjonować kontrolki używając współrzędnych absolutnych, względnych, dokowania, wyrównania, kotwic lub pozycji względem punktu obrotu (więcej tutaj)
- [x] menu i paski narzędzi
- [x] wsparcie wielu platform (Windows przez API i wirtualny terminal, Linux przez ncurses, MacOS przez termios)
- [x] wsparcie dla wielowątkowości, umożliwiające zadania w tle
- [x] timery
- [x] obsługa myszy
- [x] obsługa schowka
- [x] motywy kolorystyczne
- [x] obsługa znaków Unicode
- [x] predefiniowane okna dialogowe (okno wiadomości, okno wejściowe, selektor kolorów, okna zapisu i otwierania, nawigator folderów, itd.)
- [x] wsparcie prawdziwych kolorów (24 bity na piksel) dla terminali obsługujących tę funkcję.
📸 Zrzuty ekranu

👉 Sprawdź Galerię, aby zobaczyć pełne demonstracje wszystkich kontrolek!
🖥️ Backend’y
AppCUI obsługuje różne backendy w zależności od systemu operacyjnego, na którym jest używany:
- Windows Console - oparty na niskopoziomowym API Win32, zaprojektowany dla klasycznego konsolowego systemu Windows
- Windows VT - oparty na sekwencjach ANSI, zaprojektowany dla nowoczesnych wirtualnych terminali Windows
- NCurses - oparty na API NCurses dla środowisk linuxowych
- Termios - oparty na sekwencjach ANSI oraz niskopoziomowych API dla MAC OSX
- Web Terminal - zaprojektowany do implementacji webowej (oparty na webgl)
- CrossTerm - oparty na bibliotece crossterm
, ale aktywowany przez flagę funkcji
🚀 Szybki start
Dodaj poniższe do swojego pliku Cargo.toml:
toml
[dependencies]
appcui = "*"
Następnie utwórz nowy projekt w języku Rust i dodaj poniższy kod: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(()) }
lub bardziej zwięzła wersja z użyciem proc-makro:
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::*;Następnie uruchom projekt poleceniemcargo run. Powinno pojawić się okno z tytułemTesti tekstemHello World !na środku.🧪 Przykłady
AppCUI-rs zawiera zestaw przykładów, które pomogą Ci zacząć. Możesz je znaleźć w folderze examples, w tym:
- Gry takie jak Kółko i Krzyżyk, Wąż, Flappy Bird, Saper, Ram it, PacMan, Szachy, Connect Four, 2048 lub Tetris
- Narzędzia takie jak Kalkulator, Przeglądarka CSV, Konwerter temperatury lub Stoper
- Animacje takie jak Matrix, Fraktale lub Spirala
- Kontrolki/Widgety takie jak Przycisk, CheckBox, ComboBox, DatePicker, ListView, TreeView i wiele innych.
- Okna dialogowe takie jak Powiadomienie lub Wejście
🛠️ Bardziej złożony przykład
Przykład, który tworzy okno z przyciskiem, a po jego naciśnięciu zwiększa licznik.
// 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(()) } ``
🛣️ Plan działania
- [x] Podstawowy zestaw widżetów oraz wsparcie dla Windows, Linux i MacOS
- [x] Wsparcie dla WebGL
- [ ] Wsparcie dla OpenGL / SDL / Vulkan
- [ ] Wsparcie dla TextArea z podświetlaniem składni
🤝 Współtworzenie
Wkład, zgłoszenia problemów i propozycje funkcji są mile widziane! Zajrzyj do CONTRIBUTING.md, aby rozpocząć.
Dołącz do dyskusji na GitHub Discussions.
--- Tranlated By Open Ai Tx | Last indexed: 2026-02-09 ---