Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

🖥️ gui - Grafik Kullanıcı Arayüzü

Pencere, buton, menü ve diğer GUI bileşenleri ile masaüstü uygulamaları

📦 169 Fonksiyon 📝 1636 Satır 💾 53.6 KB

📋 Genel Bakış

gui modülü, modern grafik kullanıcı arayüzleri oluşturmak için kapsamlı widget ve pencere yönetimi araçları sağlar. Native görünümlü, çapraz platform masaüstü uygulamaları geliştirin.

🪟 Pencere Yönetimi

  • gui.Pencere() - Ana uygulama penceresi
  • gui.Dialog() - İletişim kutusu
  • gui.başlık_ayarla() - Pencere başlığı
  • gui.boyut_ayarla() - Pencere boyutu (genişlik, yükseklik)
  • gui.merkeze_al() - Pencereyi ekranın merkezine alma

🎛️ Temel Widgetlar

  • gui.Buton() - Tıklanabilir buton
  • gui.Etiket() - Metin etiketi
  • gui.GirişKutusu() - Tek satır metin girişi
  • gui.MetinAlanı() - Çok satırlı metin alanı
  • gui.OnayKutusu() - Checkbox (işaret kutusu)
  • gui.RadyoDüğmesi() - Radio button

📋 Liste ve Seçim

  • gui.AçılanListe() - Dropdown/ComboBox
  • gui.Liste() - Liste görünümü
  • gui.Tablo() - Tablo/grid widget
  • gui.Ağaç() - Ağaç görünümü

📐 Düzen (Layout)

  • gui.DikeySandık() - Dikey layout (VBox)
  • gui.YataySandık() - Yatay layout (HBox)
  • gui.Izgara() - Grid layout
  • gui.Form() - Form layout

📁 Dosya ve Dialog

  • gui.dosya_aç_dialog() - Dosya seçme dialogu
  • gui.dosya_kaydet_dialog() - Dosya kaydetme dialogu
  • gui.klasör_seç_dialog() - Klasör seçme
  • gui.mesaj_kutusu() - Bilgi mesajı
  • gui.onay_kutusu() - Onay dialogu

🎨 Menü ve Toolbar

  • gui.MenuÇubuğu() - Menü çubuğu
  • gui.Menü() - Dropdown menü
  • gui.Menüöğesi() - Menü öğesi
  • gui.AraçÇubuğu() - Toolbar

💡 Kullanım Örnekleri

Basit Hesap Makinesi

kullan gui

sınıf HesapMakinesi {
    değer pencere: gui.Pencere
    değer sonuç_etiketi: gui.Etiket
    değer işlem: Dize = ""
    değer ilk_sayı: Gerçek = 0.0
    değer operatör: Dize = ""
    
    fonksiyon yeni() -> HesapMakinesi {
        değer pencere = gui.Pencere()
        pencere.başlık_ayarla("Hesap Makinesi")
        pencere.boyut_ayarla(300, 400)
        pencere.merkeze_al()
        
        değer sonuç_etiketi = gui.Etiket("0")
        sonuç_etiketi.yazı_boyutu_ayarla(24)
        sonuç_etiketi.hizalama_ayarla(gui.Hizalama.SAĞ)
        
        dön HesapMakinesi {
            pencere: pencere,
            sonuç_etiketi: sonuç_etiketi,
            işlem: "",
            ilk_sayı: 0.0,
            operatör: ""
        }
    }
    
    fonksiyon rakam_tıkla(rakam: Dize) {
        bu.işlem += rakam
        bu.sonuç_etiketi.metin_ayarla(bu.işlem)
    }
    
    fonksiyon operatör_tıkla(op: Dize) {
        eğer bu.işlem != "" {
            bu.ilk_sayı = bu.işlem.gerçeğe()
            bu.operatör = op
            bu.işlem = ""
        }
    }
    
    fonksiyon eşittir_tıkla() {
        eğer bu.işlem != "" ve bu.operatör != "" {
            değer ikinci_sayı = bu.işlem.gerçeğe()
            değer sonuç = 0.0
            
            eşleştir bu.operatör {
                "+" => { sonuç = bu.ilk_sayı + ikinci_sayı }
                "-" => { sonuç = bu.ilk_sayı - ikinci_sayı }
                "*" => { sonuç = bu.ilk_sayı * ikinci_sayı }
                "/" => { sonuç = bu.ilk_sayı / ikinci_sayı }
            }
            
            bu.işlem = sonuç.dizgeye()
            bu.sonuç_etiketi.metin_ayarla(bu.işlem)
            bu.operatör = ""
        }
    }
    
    fonksiyon temizle() {
        bu.işlem = ""
        bu.ilk_sayı = 0.0
        bu.operatör = ""
        bu.sonuç_etiketi.metin_ayarla("0")
    }
    
    fonksiyon arayüz_oluştur() {
        değer düzen = gui.DikeySandık()
        düzen.ekle(bu.sonuç_etiketi)
        
        // Rakam butonları
        değer rakamlar = [
            ["7", "8", "9", "/"],
            ["4", "5", "6", "*"],
            ["1", "2", "3", "-"],
            ["C", "0", "=", "+"]
        ]
        
        için satır içinde rakamlar {
            değer yatay = gui.YataySandık()
            
            için değer içinde satır {
                değer buton = gui.Buton(değer)
                buton.min_boyut_ayarla(60, 50)
                
                eğer değer == "C" {
                    buton.tıklandı_bağla(|| bu.temizle())
                } yoksa eğer değer == "=" {
                    buton.tıklandı_bağla(|| bu.eşittir_tıkla())
                } yoksa eğer değer içinde ["+", "-", "*", "/"] {
                    buton.tıklandı_bağla(|| bu.operatör_tıkla(değer))
                } yoksa {
                    buton.tıklandı_bağla(|| bu.rakam_tıkla(değer))
                }
                
                yatay.ekle(buton)
            }
            
            düzen.ekle(yatay)
        }
        
        bu.pencere.düzen_ayarla(düzen)
    }
    
    fonksiyon göster() {
        bu.arayüz_oluştur()
        bu.pencere.göster()
    }
}

// Uygulamayı başlat
değer uygulama = gui.Uygulama()
değer hesap_makinesi = HesapMakinesi.yeni()
hesap_makinesi.göster()
uygulama.çalıştır()

Metin Editörü

kullan gui
kullan fs

sınıf MetinEditörü {
    değer pencere: gui.Pencere
    değer metin_alanı: gui.MetinAlanı
    değer geçerli_dosya: Opsiyonel<Dize> = boş
    
    fonksiyon yeni() -> MetinEditörü {
        değer pencere = gui.Pencere()
        pencere.başlık_ayarla("Metin Editörü")
        pencere.boyut_ayarla(800, 600)
        pencere.merkeze_al()
        
        değer metin_alanı = gui.MetinAlanı()
        metin_alanı.yazı_tipi_ayarla("Courier New", 12)
        
        dön MetinEditörü {
            pencere: pencere,
            metin_alanı: metin_alanı,
            geçerli_dosya: boş
        }
    }
    
    fonksiyon yeni_dosya() {
        eğer bu.değişiklik_var() {
            değer cevap = gui.onay_kutusu(
                "Kaydetmeden önce",
                "Değişiklikler kaydedilsin mi?",
                gui.Butonlar.EVET_HAYIR_İPTAL
            )
            
            eğer cevap == gui.Yanıt.EVET {
                bu.kaydet()
            } yoksa eğer cevap == gui.Yanıt.İPTAL {
                dön
            }
        }
        
        bu.metin_alanı.temizle()
        bu.geçerli_dosya = boş
        bu.pencere.başlık_ayarla("Metin Editörü - Yeni Dosya")
    }
    
    fonksiyon aç() {
        değer dosya_yolu = gui.dosya_aç_dialog(
            başlık: "Dosya Aç",
            filtreler: [("Metin Dosyaları", "*.txt"), ("Tüm Dosyalar", "*.*")]
        )
        
        eğer dosya_yolu.var_mı() {
            değer içerik = fs.dosya_oku_metin(dosya_yolu.aç())
            bu.metin_alanı.metin_ayarla(içerik)
            bu.geçerli_dosya = dosya_yolu
            bu.pencere.başlık_ayarla(f"Metin Editörü - {dosya_yolu.aç()}")
        }
    }
    
    fonksiyon kaydet() {
        eğer bu.geçerli_dosya.var_mı() {
            bu.dosyaya_kaydet(bu.geçerli_dosya.aç())
        } yoksa {
            bu.farklı_kaydet()
        }
    }
    
    fonksiyon farklı_kaydet() {
        değer dosya_yolu = gui.dosya_kaydet_dialog(
            başlık: "Farklı Kaydet",
            varsayılan_ad: "yeni_dosya.txt",
            filtreler: [("Metin Dosyaları", "*.txt")]
        )
        
        eğer dosya_yolu.var_mı() {
            bu.dosyaya_kaydet(dosya_yolu.aç())
            bu.geçerli_dosya = dosya_yolu
        }
    }
    
    fonksiyon dosyaya_kaydet(dosya_yolu: Dize) {
        değer içerik = bu.metin_alanı.metin_al()
        fs.dosya_yaz_metin(dosya_yolu, içerik)
        gui.mesaj_kutusu("Başarılı", "Dosya kaydedildi!", gui.MesajTipi.BİLGİ)
        bu.pencere.başlık_ayarla(f"Metin Editörü - {dosya_yolu}")
    }
    
    fonksiyon değişiklik_var() -> Mantıksal {
        // Basitleştirilmiş - gerçek uygulamada değişiklik takibi yapılır
        dön bu.metin_alanı.metin_al().uzunluk > 0
    }
    
    fonksiyon menü_oluştur() {
        değer menü_çubuğu = gui.MenuÇubuğu()
        
        // Dosya menüsü
        değer dosya_menü = gui.Menü("Dosya")
        dosya_menü.öğe_ekle("Yeni", "Ctrl+N", || bu.yeni_dosya())
        dosya_menü.öğe_ekle("Aç...", "Ctrl+O", || bu.aç())
        dosya_menü.öğe_ekle("Kaydet", "Ctrl+S", || bu.kaydet())
        dosya_menü.öğe_ekle("Farklı Kaydet...", "Ctrl+Shift+S", || bu.farklı_kaydet())
        dosya_menü.ayırıcı_ekle()
        dosya_menü.öğe_ekle("Çıkış", "Ctrl+Q", || bu.pencere.kapat())
        
        menü_çubuğu.menü_ekle(dosya_menü)
        bu.pencere.menü_çubuğu_ayarla(menü_çubuğu)
    }
    
    fonksiyon göster() {
        bu.menü_oluştur()
        
        değer düzen = gui.DikeySandık()
        düzen.ekle(bu.metin_alanı)
        bu.pencere.düzen_ayarla(düzen)
        
        bu.pencere.göster()
    }
}

// Uygulamayı başlat
değer uygulama = gui.Uygulama()
değer editör = MetinEditörü.yeni()
editör.göster()
uygulama.çalıştır()

🎯 İyi Uygulamalar

  • Layout yöneticileri kullanarak responsive arayüzler oluşturun
  • Uzun işlemler için progress bar gösterin
  • Kısayol tuşları (accelerator) ekleyin
  • Erişilebilirlik için tooltip ve etiketler kullanın
  • Thread'lerde GUI güncellemelerini yapmaktan kaçının
  • Native görünüm için platform stillerini kullanın

🔗 İlgili Modüller

  • graphics - 2D çizim ve grafik
  • image - Görüntü işleme
  • fs - Dosya sistemi
  • thread - Çoklu iş parçacığı