AppCUI-rs

AppCUI-rs — это быстрая кроссплатформенная библиотека на Rust для создания современных текстовых пользовательских интерфейсов (TUI) с богатыми виджетами, темами и полной поддержкой Unicode — альтернатива ncurses и другим фреймворкам терминального UI.
✨ Возможности
- [x] множество готовых элементов управления (кнопки, метки, текстовые поля, чекбоксы, радиокнопки, списки, деревья, комбобоксы, выбор даты/времени, выбор цвета, вкладки, аккордеоны и др.). Полный список элементов управления можно найти здесь
- [x] мощная система компоновки, позволяющая размещать элементы управления с помощью абсолютных координат, относительных координат, докинга, выравнивания, якорей или позиционирования по опорной точке (подробнее здесь)
- [x] меню и панели инструментов
- [x] поддержка нескольких платформ (Windows через API и виртуальный терминал, Linux через ncurses, MacOS через termios)
- [x] поддержка многопоточности для выполнения фоновых задач
- [x] таймеры
- [x] поддержка мыши
- [x] поддержка буфера обмена
- [x] цветовые темы
- [x] поддержка символов Unicode
- [x] предопределённые диалоги (сообщения, ввод, выбор цвета, сохранение и открытие файлов, навигация по папкам и др.)
- [x] поддержка настоящих цветов (24 бита на пиксель) для терминалов, которые это поддерживают.
📸 Скриншоты

👉 Посмотрите Галерею для полноценных демонстраций всех элементов управления!
🖥️ Бэкенды
AppCUI поддерживает различные бэкенды в зависимости от операционной системы, на которой используется:
- Windows Console - основан на низкоуровневом Win32 API, предназначен для классической консоли Windows
- Windows VT - основан на ANSI-последовательностях, предназначен для современных виртуальных терминалов Windows
- NCurses - основан на API NCurses для Linux-сред
- Termios - основан на ANSI-последовательностях и низкоуровневых API для MAC OSX
- Web Terminal - предназначен для веб-реализации (на основе webgl)
- CrossTerm - основан на библиотеке crossterm
, но включается с помощью feature-флага
🚀 Быстрый старт
Добавьте следующее в ваш Cargo.toml:
toml
[dependencies]
appcui = "*"
Затем создайте новый проект Rust и добавьте следующий код: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(()) }
или более компактная версия с использованием 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::*;Затем запустите проект с помощью командыcargo run. Вы должны увидеть окно с заголовкомTestи текстомHello World !по центру.🧪 Примеры
AppCUI-rs поставляется с набором примеров, которые помогут вам начать работу. Вы найдете их в папке examples, включая:
- Игры такие как Крестики-нолики, Змейка, Flappy Bird, Сапёр, Ram it, PacMan, Шахматы, Connect Four, 2048 или Тетрис
- Утилиты такие как Калькулятор, CSV Просмотрщик, Конвертер температуры или Таймер
- Анимации такие как Матрица, Фракталы или Спираль
- Элементы управления/Виджеты такие как Кнопка, Флажок, Комбобокс, Выбор даты, Список, Дерево и многое другое.
- Диалоги такие как Уведомление или Ввод
🛠️ Более сложный пример
Пример, который создает окно с кнопкой, при нажатии на которую увеличивается счетчик.
// 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(()) } ``
🛣️ Дорожная карта
- [x] Базовый набор виджетов и поддержка Windows, Linux и MacOS
- [x] Поддержка WebGL
- [ ] Поддержка OpenGL / SDL / Vulkan
- [ ] Поддержка TextArea для подсветки кода
🤝 Вклад
Вклады, вопросы и запросы на новые функции приветствуются! Ознакомьтесь с CONTRIBUTING.md, чтобы начать.
Присоединяйтесь к обсуждению в GitHub Discussions.
--- Tranlated By Open Ai Tx | Last indexed: 2026-02-09 ---