AppCUI-rs

AppCUI-rs adalah pustaka Rust yang cepat, lintas platform untuk membangun antarmuka pengguna berbasis teks (TUI) modern dengan widget kaya, tema, dan dukungan Unicode penuh—alternatif untuk ncurses dan kerangka UI terminal lainnya.
✨ Fitur
- [x] banyak kontrol siap pakai (tombol, label, kotak teks, kotak centang, tombol radio, tampilan daftar, tampilan pohon, kotak kombo, pemilih tanggal/waktu, pemilih warna, tab, akordeon, dll). Daftar lengkap kontrol dapat ditemukan di sini
- [x] sistem tata letak yang kuat yang memungkinkan Anda memposisikan kontrol menggunakan koordinat absolut, koordinat relatif, docking, perataan, anchor atau posisi pivot (lihat lebih lanjut di sini)
- [x] menu dan toolbar
- [x] dukungan multi-platform (Windows melalui API dan terminal virtual, Linux melalui ncurses, MacOS melalui termios)
- [x] dukungan multi-threading untuk memungkinkan tugas latar belakang
- [x] timer
- [x] dukungan mouse
- [x] dukungan clipboard
- [x] tema warna
- [x] dukungan untuk karakter Unicode
- [x] dialog yang sudah tersedia (kotak pesan, kotak input, pemilih warna, dialog simpan & buka, navigator folder, dll)
- [x] dukungan warna asli (24 bit per piksel) untuk terminal yang mendukungnya.
📸 Tangkapan Layar

👉 Lihat Galeri untuk demo penuh semua kontrol!
🖥️ Backend
AppCUI mendukung berbagai backend berdasarkan sistem operasi yang digunakan:
- Windows Console - berbasis API tingkat rendah Win32, dirancang untuk konsol Windows klasik
- Windows VT - berbasis urutan ANSI, dirancang untuk terminal virtual Windows modern
- NCurses - berbasis API NCurses untuk lingkungan Linux
- Termios - berbasis urutan ANSI dan API tingkat rendah untuk MAC OSX
- Web Terminal - dirancang untuk implementasi Web (berbasis webgl)
- CrossTerm - berbasis crate crossterm
, tetapi diaktifkan melalui fitur flag
🚀 Mulai Cepat
Tambahkan hal berikut ke Cargo.toml Anda:
toml
[dependencies]
appcui = "*"
Kemudian buat proyek Rust baru dan tambahkan kode berikut:
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(()) }
atau versi yang lebih ringkas menggunakan 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::*;Kemudian jalankan proyek dengancargo run. Anda akan melihat sebuah jendela dengan judulTestdan teksHello World !di tengah.🧪 Contoh
AppCUI-rs hadir dengan sejumlah contoh untuk membantu Anda memulai. Anda dapat menemukannya di folder examples, termasuk:
- Permainan seperti Tic Tac Toe, Snake, Flappy Bird, Minesweeper, Ram it, PacMan, Chees, Connect Four, 2048 atau Tetris
- Utilitas seperti Calculator, CSV Viewer, Temperature Converter atau Timer
- Animasi seperti Matrix, Fractals atau Spiral
- Kontrol/Widget seperti Button, CheckBox, ComboBox, DatePicker, ListView, TreeView dan masih banyak lagi.
- Dialog seperti Notification atau Input
🛠️ Contoh yang lebih kompleks
Contoh yang membuat jendela dengan sebuah tombol yang saat ditekan akan menambah sebuah penghitung.
// 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(()) } ``
🛣️ Peta Jalan
- [x] Set widget dasar dan dukungan untuk Windows, Linux, dan MacOS
- [x] Dukungan WebGL
- [ ] Dukungan OpenGL / SDL / Vulkan
- [ ] Dukungan TextArea untuk penyorotan kode
🤝 Kontribusi
Kontribusi, masalah, dan permintaan fitur sangat diterima! Lihat CONTRIBUTING.md untuk memulai.
Bergabunglah dalam diskusi di GitHub Discussions.
--- Tranlated By Open Ai Tx | Last indexed: 2026-02-09 ---