Python Kivy ile Yeni Pencere Açmak
Python Kivy ile Popup Yapmak
.kv dosyasındaki tasarım ekranı. Tasarım ekranında açılır pencereyi temsil eden bir etiket ve ana program sınıfını temsil eden bir etiket bulunmalıdır. Bu örnekte Uygulama isimli sınıf App sınıfından türeyen ana program sınıfımızdır. Pencere isimli sınıf ise Popup sınıfından türetilerek oluşturulmuş sınıftır. Bu sınıfı pencereyi açmak için kullanacağız. Ayrıca pencere içindeki olayları da bu sınıf üzerinden yöneteceğiz.
Kivy dilinde py dosyasında tanımlanan sınıflar kv dosyasında <sınıfAdı>: şeklinde etiketler arasında ifade edilir. İlgili etiket altında işlem yaparken bir takım özel anahtar kelimeler kullanılır.
root: Etiketin bağlı olduğu sınıfı temsil eder.
self: O anda mevcut kontrol elemanını temsil eder.
app: Ana program sınıfını temsil eder.
Bu kelimelerden root anahtar kelimesi etiket sınıfını temsil ederken self anahtar kelimesi o anda mevcut kontrol elemanını temsil eder. Bir diğer özel kelime app kelimesidir. Bu kelime de uygulamanın kendisini temsil eder. App sınıfı ile uygulamadaki diğer sınıflara erişebilirsiniz. Mesela bir butona tıklama olayı yazıyorsanız root dediğimizde butonun altında bulunduğu ana sınıfı temsil etmiş oluruz, self ise butonun kendisini temsil eder.
<Uygulama>: BoxLayout: orientation: "vertical" Button: id: dugme text:u'Pencere Ac' size_hint_y: 1 on_press:app.pencereAc() Label: size_hint_y:3 id: mesajLabel text: "deneme amaçlı mesaj metnidiri" <pencere>: size_hint: (None,None) size: (300, 300) auto_dismiss: False title: "Mesaj Gönderme" BoxLayout: orientation: "vertical" Label: text: "Alici" TextInput: id: alici_eposta Label: text: "Gönderilecek Mesaj" TextInput: id: mesaj_metin Button: text: "Mesaj Gönder" on_press: root.mesajGonder(app)
Yukarıdaki kv dosyasında pencere etiketi py dosyasındaki pencere sınıfını temsil etmektedir. Bu etiket altında iken root anahtar kelimesi pencere sınıfını temsil edecektir.
Açılan pencere içinden yapılan işlem sonucunda ana pencerede bulunan bir Label elemanının text değeri değiştirilmek istenmektedir. Bu sebeple mesajGonder metoduna parametre olarak app sınıfı gönderilmiştir. App sınıfı bu programda Uygulama sınıfını temsil etmektedir. Ana sınıf altında bulunan Label elemanına id değeri ile ulaşıp text özelliği değiştiriliyor.
Pencere açmayı sağlayan python kodları. Ana program ilk aşamada ana pencereyi görüntüleyecektir. .kv dosyasında görüldüğü gibi ilk ekrandaki butonun tıklanma olayına bir metot atanmıştır. Bu metot popup pencereyi açmamızı sağlayacaktır. Açılan pencerede bulunan butonun on_press olayına atanan metot pencere sınıfı altında bulunan mesajGonder metodudur. Bu metot parametre olarak uygluma sınıfını almaktadır. Çünkü amacımız ana pencerede bulunan bir Label elemanının text özelliğini değiştirmektir. Bu labele id’si ile erişebilmek için ana pencere sınıfına ihtiyacımız var. Bu örnekte app anahtar kelimesi Uygulama sınıfını temsil ediyor.
from kivy.app import App from kivy.uix.popup import Popup from kivy.uix.boxlayout import BoxLayout from kivy.uix.button import Button class pencere(Popup): def mesajGonder(self, anaPencere): alici = self.ids.alici_eposta.text mesaj = self.ids.mesaj_metin.text anaPencere.root.ids.mesajLabel.text = alici.strip()+" kişisine "+mesaj.strip()+" mesajı gönderildi" self.dismiss() class Uygulama(App): def pencereAc(self): self.pencere=pencere() self.pencere.open() Uygulama().run()
Bir Cevap Yazın
Yorum yapabilmek için giriş yapmalısınız.