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