Web Analytics

AppCUI-rs

⭐ 358 stars Vietnamese by gdt050579

🌐 Ngôn ngữ

AppCUI-rs

`` ⯈ 𝗔𝗽𝗽𝗖𝗨𝗜-𝗿𝘀 🖳


Trạng thái Build Windows
Trạng thái Build Linux
Trạng thái Build MacOS
Mức độ bao phủ mã nguồn
Giấy phép
Crates.io
Docs.rs
Thư viện ảnh

AppCUI-rs là một thư viện Rust nhanh, đa nền tảng để xây dựng giao diện người dùng dạng văn bản hiện đại (TUI) với các widget phong phú, chủ đề và hỗ trợ Unicode đầy đủ—là một lựa chọn thay thế cho ncurses và các framework giao diện terminal khác.

✨ Tính năng

  • [x] nhiều điều khiển có sẵn (nút bấm, nhãn, hộp văn bản, hộp kiểm, nút radio, danh sách, cây thư mục, hộp chọn, chọn ngày/giờ, chọn màu, tab, accordion, v.v.). Danh sách đầy đủ các điều khiển có thể xem tại đây
  • [x] hệ thống bố cục mạnh mẽ cho phép bạn định vị điều khiển bằng tọa độ tuyệt đối, tương đối, docking, căn chỉnh, neo hoặc định vị theo pivot (xem thêm tại đây)
  • [x] menu và thanh công cụ
  • [x] hỗ trợ đa nền tảng (Windows qua API và virtual terminal, Linux qua ncurses, MacOS qua termios)
  • [x] hỗ trợ đa luồng để thực hiện các tác vụ nền
  • [x] bộ đếm thời gian
  • [x] hỗ trợ chuột
  • [x] hỗ trợ clipboard
  • [x] chủ đề màu sắc
  • [x] hỗ trợ ký tự Unicode
  • [x] hộp thoại định nghĩa sẵn (hộp thông báo, hộp nhập liệu, chọn màu, hộp thoại lưu & mở, trình điều hướng thư mục, v.v)
  • [x] hỗ trợ màu thực (24 bit/pixel) cho các terminal hỗ trợ.

📸 Ảnh chụp màn hình

👉 Xem Thư viện ảnh để xem demo đầy đủ của tất cả điều khiển!

🖥️ Backend

AppCUI hỗ trợ nhiều backend khác nhau tùy theo hệ điều hành mà bạn sử dụng:

  • Windows Console - dựa trên API Win32 cấp thấp, thiết kế cho console cổ điển của Windows
  • Windows VT - dựa trên chuỗi ANSI, thiết kế cho các terminal ảo hiện đại của Windows
  • NCurses - dựa trên API NCurses cho môi trường Linux
  • Termios - dựa trên chuỗi ANSI và API cấp thấp cho MAC OSX
  • Web Terminal - thiết kế cho triển khai trên Web (dựa trên webgl)
  • CrossTerm - dựa trên crate crossterm, nhưng được kích hoạt thông qua một cờ tính năng
Thông tin thêm về các backend được hỗ trợ có thể xem tại đây

🚀 Khởi động nhanh

Thêm các dòng sau vào Cargo.toml của bạn:

toml [dependencies] appcui = "*"
Sau đó tạo một dự án Rust mới và thêm đoạn mã sau:

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(()) }

hoặc một phiên bản gọn hơn sử dụng 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(()) }

Sau đó chạy dự án với cargo run. Bạn sẽ thấy một cửa sổ với tiêu đề Test và dòng chữ Hello World ! ở giữa màn hình.

🧪 Các ví dụ

AppCUI-rs đi kèm với một bộ ví dụ để giúp bạn bắt đầu. Bạn có thể tìm thấy chúng trong thư mục examples, bao gồm:

🛠️ Một ví dụ phức tạp hơn

Một ví dụ tạo ra một cửa sổ với một nút bấm, khi nhấn sẽ tăng bộ đếm.

rust use appcui::prelude::*;

// 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