Web Analytics

AppCUI-rs

⭐ 376 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, modern, metin tabanlı kullanıcı arayüzleri (TUI) oluşturmak için zengin widget'lar, temalar ve tam Unicode desteği sunan, hızlı ve çapraz platform Rust kütüphanesidir—ncurses ve diğer terminal arayüz çerçevelerine alternatif olarak tasarlanmıştır.

✨ Özellikler

  • [x] kutudan çıkar çıkmaz birden fazla kontrol (butonlar, etiketler, metin kutuları, onay kutuları, radyo düğmeleri, liste görünümleri, ağaç görünümleri, kombolar, tarih/saat seçiciler, renk seçiciler, sekmeler, akordeonlar vb.). Kontrollerin tam listesi için buraya bakabilirsiniz
  • [x] güçlü bir yerleşim sistemi ile mutlak koordinatlar, göreli koordinatlar, kenetleme, hizalama, sabitleme veya pivot konumlandırma ile kontrolleri yerleştirebilirsiniz (daha fazla bilgi için buraya bakınız)
  • [x] menüler ve araç çubukları
  • [x] çoklu platform desteği (Windows API ve sanal terminal ile, Linux'ta ncurses ile, macOS'ta termios ile)
  • [x] arka plan görevleri için çoklu iş parçacığı desteği
  • [x] zamanlayıcılar
  • [x] fare desteği
  • [x] pano desteği
  • [x] renk temaları
  • [x] Unicode karakter desteği
  • [x] önceden tanımlı diyaloglar (mesaj kutusu, giriş kutusu, renk seçici, kaydet & aç diyalogları, klasör gezgini vb.)
  • [x] destekleyen terminallerde gerçek renk desteği (piksel başına 24 bit).

📸 Ekran Görüntüleri

👉 Tüm kontrollerin tam demoları için Galeri'ye göz atın!

🖥️ Backend'ler

AppCUI, işletim sistemine bağlı olarak çeşitli backend'leri 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'sine dayalıdır
  • Termios - macOS 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, bir özellik bayrağı ile etkinleştirilir
Desteklenen arka uçlar hakkında daha fazla bilgiye buradan ulaşabilirsiniz

🚀 Hızlı Başlangıç

Aşağıdakileri 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(()) }


Ya da proc-makroları kullanan daha kompakt bir versiyon:
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 ile çalıştırın. Ekranda başlığı Test olan ve ortasında Hello World ! yazan bir pencere görmelisiniz.

🧪 Örnekler

AppCUI-rs, başlamanıza yardımcı olmak için bir dizi örnekle birlikte gelir. Bunları examples klasöründe bulabilirsiniz, örnekler arasında:

🛠️ Daha karmaşık bir örnek

Bir pencere oluşturan ve butona basıldığında bir sayacı artıran 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