🖥️ 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