Web Analytics

AppCUI-rs

⭐ 358 stars Turkish by gdt050579

🌐 Dil

AppCUI-rs

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


Windows Derleme Durumu
Linux Derleme Durumu
MacOS Derleme Durumu
Kod Kapsamı
Lisans
Crates.io
Docs.rs
Galeri

AppCUI-rs; zengin araçlar, temalar ve tam Unicode desteği ile modern, metin tabanlı kullanıcı arayüzleri (TUI) oluşturmak için hızlı, çok platformlu bir Rust kütüphanesidir—ncurses ve diğer terminal UI çerçevelerine alternatif olarak kullanılabilir.

✨ Özellikler

  • [x] kutudan çıktığı gibi çoklu kontrol (butonlar, etiketler, metin kutuları, onay kutuları, radyo butonları, liste görünümleri, ağaç görünümleri, açılır kutular, tarih/saat seçiciler, renk seçiciler, sekmeler, akordeonlar, vb.). Tüm kontrol listesini buradan bulabilirsiniz
  • [x] kontrolleri mutlak koordinatlar, göreli koordinatlar, dock, hizalama, sabitleyiciler veya pivot konumlandırma ile yerleştirmenizi sağlayan güçlü bir yerleşim sistemi (daha fazlası için buraya bakın)
  • [x] menüler ve araç çubukları
  • [x] çoklu platform desteği (Windows için API ve sanal terminal, Linux için ncurses, MacOS için termios)
  • [x] arka plan görevleri için çoklu iş parçacığı desteği
  • [x] zamanlayıcılar
  • [x] fare desteği
  • [x] panoya kopyalama desteği
  • [x] renk temaları
  • [x] Unicode karakterler için destek
  • [x] önceden tanımlı diyaloglar (mesaj kutusu, giriş kutusu, renk seçici, kaydet & aç diyalogları, klasör gezgini vb.)
  • [x] bunu destekleyen terminallerde gerçek renk desteği (piksel başına 24 bit).

📸 Ekran Görüntüleri

👉 Tüm kontrol demoları için Galeriye göz atın!

🖥️ Arka Uçlar

AppCUI, kullanıldığı işletim sistemine bağlı olarak çeşitli arka uçları destekler:

  • Windows Konsolu - Win32 düşük seviyeli API'ye dayalı, klasik Windows konsolu için tasarlanmıştır
  • Windows VT - ANSI dizilerine dayalı, modern Windows sanal terminalleri için tasarlanmıştır
  • NCurses - Linux ortamları için NCurses API'ye dayalıdır
  • Termios - MAC OSX için ANSI dizileri ve düşük seviyeli API'lere dayalıdır
  • Web Terminali - Web uygulamaları için tasarlanmıştır (webgl tabanlı)
  • CrossTerm - crossterm crate'ine dayalıdır, ancak bir özellik bayrağı ile etkinleştirilir
Desteklenen arka uçlar hakkında daha fazla bilgiye buradan ulaşabilirsiniz

🚀 Hızlı Başlangıç

Aşağıdakini Cargo.toml dosyanıza ekleyin:

toml [dependencies] appcui = "*"

Daha sonra yeni bir Rust projesi oluşturun ve aşağıdaki kodu ekleyin:
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(()) }


veya proc-macros kullanarak daha kompakt bir sürüm:
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(()) }


Ardından projeyi cargo run komutuyla çalıştırın. Merkezde Hello World ! yazısı ve başlığı Test olan bir pencere görmelisiniz.

🧪 Örnekler

AppCUI-rs, başlamanıza yardımcı olacak bir dizi örnekle birlikte gelir. examples klasöründe şunları bulabilirsiniz:

🛠️ Daha karmaşık bir örnek

Bir butona basıldığında bir sayacı artıran bir pencere oluşturan bir örnek.

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