PyQT Fonksiyon Yazmak ve Çağırmak (QT - 3)

Merhaba arkadaşlar,

Uzun zamandır(yaklaşık 1,5 ay) yeni yazı yazmıyordum.Yer yer okul yer yer de diğer işlerimden pek bi fırsat bulup kafayı toplayamadım bir türlü.Bu yazımız da yarım bıraktığım PyQT serisine devam edecez.Daha önce buradaki yazıda QT Designer kullanımını ve bu designer'ın bize verdiği hazır fonksiyonları kullanarak basit bir program yapmayı göstermiştim.Şimdi de kendimiz bir fonksiyonu nasıl yazabiliriz ve kullanabiliriz bunu göstericem.Biraz komplike gelebilir belki ama adım adım ve geniş bir çerçeveden bakarak anlatmaya çalışıcam sizlere.

Burada geniş açıdan bakarak basit bir "Hello World" uygulaması yazacaz.Sonrasın da zaten kendi programlarınızda istediğiniz şekilde yön verebileceğinize inanıyorum.Yapacağımız işlemler adım adım;

  • Kullanıcıdan adını iste
  • Merhaba de.
Kullanıcıdan adını istemek için bir LineEdit kullanıyoruz, bir PushButton ve Merhaba demek içinde bir Label kullanıyoruz.Bütün işlemler sonunda py ve ui dosyalarını github adresimde paylaşacağım.

Photo

Son hali bu şekilde olacak penceremizin.Burdan sonra "OK" butonumuza kendi yazacağımız fonksiyonumuzu bağlamamız gerekiyor.Bu işlemi de üstteki menüden Edit Signals/Slots'a tıklayarak yapıyoruz. Photo

Fonksiyona bağlama işlemi için de PushButtonumuza tıklayıp çıkan oku Main Window üzerinde bırakarak yapıyoruz.Bu da "Butondan herhangi bir işlem(birazdan seçeceğimiz) yapıldığı zaman Main Window'u uyar." demek oluyor.Şu şekilde yapıyoruz onu da; Photo

Bunu yapar yapmaz karşınıza bir pencere açılacak.Ordan da butonun yapacağı işlemi (clicked()) ve Main Window'un çalıştıracağı fonksiyonu seçiyoruz.Fonksiyonu kendimiz yazacağımız için, oraya elle eklememiz gerekiyor.O işlem için de altında ki "Edit" butonuna tıklıyoruz ve karşımıza Main Window'un Signal ve Slotları çıkıyor.Bizim yapacağımız işlem bir nevi yakalayıcı görevi göreceği için Slots kısmına kendi yazacağımız fonksiyonu ekliyoruz orda bulunan "+" butonuna basarak.Çünkü Signal işlemini PushButton ile yapıyoruz. Photo

Ben burda "merhabaDe()" isimli bir fonksiyon oluşturmuş oldum.Ve programın yapacağı işlem; PushButton üzerinde clicked() fonksiyonu çalışınca Main Window üzerinde merhabaDe() fonksiyonunu çalıştırmak.Sağ altta ki Signal/Slot Editor kısmından da bunu görebilirsiniz.

Buraya kadar fonksiyonu eklediyseniz, kodunu yazmaya başlayabiliriz.QT Serisinin ilk yazısında bahsettiğim şekilde bu UI dosyasını kaydedip açtığınız python dosyası ile okuyabilirsiniz.Yazıya geri dönmek için; QT Proje ve Pencere Oluşturma (QT - 1)

Oluşturduğumuz class'ımızın içine merhabaDe() isimli bir fonksiyon açıyoruz ve kod yazma işlemimize buradan devam ediyoruz. Öncelikle butona basıldığında kullanıcı isim olarak ne girmiş onu öğrenmemiz gerekiyor, yani lineEdit'in içinde ne yazıyor onu öğrenmemiz gerekiyor.Line Edit aracının fonksiyonlarına bu adresten bakabilirsiniz; http://doc.qt.io/qt-4.8/qlineedit.html

Burada gördüğümüz "text()" fonksiyonu bize LineEdit içerisinde ki metni QString olarak döndürüyor.Yani burada ki lineEdit objesinden text() fonksiyonunu çalıştırırsak bize içerisinde ki değeri döndürecek.Şu şekilde yapıyoruz onuda;

isim = self.ui.lineEdit.text()
!Burada yazan lineEdit objesi UI dosyamızda ki lineEdit objemizin ismi.UI dosyanızı QT Designer ile açtıktan sonra sağ üstten görebilirsiniz bunu. Bu ufak hayat kurtarıcı bilgiyi de verdiğimize göre devam edebiliriz.Burada lineEdit objemizin içindeki text'i isim diye bir değişkene atıyoruz.Daha sonra labelımızda bulunan "Merhaba, " yazısının yanına ekleyeceğiz bunu.Bunu düz olarak label'in içine yazarsanız label'in içinde ki "Merhaba, " yazısını kaybedersiniz.Bunu kaybetmemek için de label'imizin içinde ki texti de okuyup, onun sonuna eklemeliyiz.
merhaba = self.ui.label.text()
Label'in fonksiyonları içinde: http://doc.qt.io/qt-4.8/qlabel.html

Burada da label'imizin içine yazdığımız "Merhaba, " metnini merhaba isimli bir değişkene atıyoruz.Sonra da bu değişkenin üstüne elimizde ki isimi ekleyelim;

merhaba += isim
Artık merhaba değişkenimizde "Merhaba, blabla" gibi bir metnimiz var.Son olarakta bu metni tekrar label'imize yazdırıyoruz.Label'in içinde ki metni nasıl değiştirecez diye soruyorsanız aynı şekilde, az önce verdiğim linke bakarak kullanacağımız fonksiyonu bulabilirsiniz(http://doc.qt.io/qt-4.8/qlabel.html). Burada da setText() fonksiyonunu kullanıyoruz.
self.ui.label.setText(merhaba)
Ve bu kadar bütün işlemler.Kullanıcıdan adını öğrenip, penceremizde Merhaba şeklinde bir cevap verdik.

Programın son halinin kodları; qt3.py , qt3.ui Uygulamanın son halinin videosu: https://www.youtube.com/watch?v=1ihU6Ngyrf0

Hiçbir detayı atlamamaya özen gösterdim, fonksiyonları nasıl bulup kullanacağınıza kadar.Umarım gerçekten atlamamışımdır hiçbirini.Eğer kafasına soru takılan olursa Hakkımda kısmında ki mail adresimden bana ulaşabilir veya buraya bir yorum bırakabilir.

Umarım faydalı olmuştur, her zaman daha fazlası için.Kolay gelsin.


Tags: gui, pyqt, pyseries, python, qt designer, qt framework