10 Temmuz 2013 Çarşamba

PYQT ILE PYTHON GUI GELIŞTIRME - 2

Portalımızı takip eden yeni python geliştirici adaylarımız, pythonun ne kadar kolay ve anlaşılır bir dil olduğunu fark etmişlerdir diye düşünmekteyiz. Konu Grafiksel Kullanıcı Arayüzü geliştirme olunca durum gene farksız.

Bu yazımızda Not Ortalaması  uygulaması yazacağız. Bu uygulamamızda basit özellikler olacaktır. Bu özellikler aşağıda listelenmiştir.



  • 1.  vize notu istenecektir.
  • 2. vize notu istenecektir.
  • Final notu istenecektir.
  • Girdilerin sadece integer değerler olması kontrol edilecektir.
  • 3 sınavın ortalaması alınıp ekrana yazılacaktır.

from __future__ import division
from PyQt4.QtGui import *
from PyQt4.QtCore import *


class ortalamaHesapla(QWidget):
    def __init__(self, parent=None):
        super(ortalamaHesapla, self).__init__(parent)

        self.metin = "
Sinav Ortalamasi Hesaplama
" self.grid = QGridLayout() self.baslik = QLabel(self.metin) self.vizeA = QLabel('1. Vize Notunuz ') self.vizeB = QLabel('2. Vize Notunuz ') self.final = QLabel('Final Notunuz ') self.vizeAdeger = QLineEdit() self.vizeBdeger = QLineEdit() self.finalDeger = QLineEdit() self.sonuc = QLabel('Ortalama ') self.sonucDeger = QLabel('0.00') self.hesapla = QPushButton('Hesapla') self.grid.addWidget(self.baslik, 0, 0, 1, 2) self.grid.addWidget(self.vizeA, 1, 0) self.grid.addWidget(self.vizeAdeger, 1, 1) self.grid.addWidget(self.vizeB, 2, 0) self.grid.addWidget(self.vizeBdeger, 2, 1) self.grid.addWidget(self.final, 3, 0) self.grid.addWidget(self.finalDeger, 3, 1) self.grid.addWidget(self.sonuc, 4, 0) self.grid.addWidget(self.sonucDeger, 4, 1) self.grid.addWidget(self.hesapla, 5, 0, 1, 2) self.connect(self.hesapla, SIGNAL('pressed()'), self.hesapYap) self.setLayout(self.grid) self.setWindowTitle("Not Hesaplama ~ PythonDersleri") def hesapYap(self): ortalama = 0 try: ilk_vize = int(self.vizeAdeger.text()) ikinci_vize = int(self.vizeBdeger.text()) final_notu = int(self.finalDeger.text()) ortalama = (ilk_vize + ikinci_vize + final_notu)/3 except: self.sonucDeger.setText('Tam sayi giriniz!') return self.sonucDeger.setText('%0.2f' % ortalama) uyg = QApplication([]) pencere=ortalamaHesapla() pencere.show() uyg.exec_()



Şimdi sizlere kodları açıklayalım. İlk başta bölme işleminde float sonuçların çıkması için division modülü eklenmiştir. Ardından grafiksel kullanıcı arayüzü için gerekli pyqt4 modülleri eklenmiştir.

Grafiksel Kullanıcı Arayüzü geliştirirken iç içe olan birden fazla widget'ler olmaktadır. Tüm widgetları ve pencereleri tek bir dosyada tutmak kod karmaşıklığına neden olmaktadır. Bu nedenle tüm widget'lar farklı dosyalarda sınıf olarak tanımlanarak daha sonra ana uygulamada kullanılabilir.


QGridLayout, ızgara yerleşkesidir. Pencerenizi bir ızgara olarak düşünürseniz, sol üstte ki ilk alan 0, 0 noktasıdır. Oluşturacağımız label, buton vs görselleri bu koordinat sistemine yerleştireceğiz. Bu nedenle QGridlayout'un  addWidget metodunun parametrelerini inceleyelim.

addWidget(eklenecek item, satir, satun, satir genişliği, sutun genişliği);

Örnek olarak; addWidget(ders_adi, 0, 0, 1, 2)

ders_adi  item'ini sıfırıncı  satırın  sıfırıncı  sütununa yerleştir. Bir adet satır genişliğinde olsun ama iki adet sütun genişliğinde yer kaplasın. Sadece satır ve sütun koordinatları verilirse, default olarak kapladığı satır ve sütun alanları 1 olarak atanmaktadır.

15 ile 24. satırlar arasında gerekli Label ve LineEdit elemanlarımız tanımlanmakta. 26 ile 35. satırlar arasında ise bu elemanlarımız GridLayout'umuza eklenmekte. Eklenme sırasına ve atanan koordinatlara lütfen dikkat ediniz.

37 ve 40. satırlarda yapılan işlemlere ilk yazımızdan aşına olduğunu düşünmekteyiz.

hesapYap metodu incelendiğinde ise text box'lardan text() metodu ile değerlerin okunduğu. Bunların integer değerlere dönüştürüldüğü görülmektedir. Ardından bölme işlemi gerçekleşmektedir. Bu işlemler try;except blokları arasında tanımlanmıştır. Bu hata gerçekleşir ise bunun muhtemel nedeni text box'ların boş bırakılması veya string değer girilmesidir. Bu durumda sonucDeger label'ının değeri kırmızı font'ta hata yazısı yazacak şekilde değiştirilmiştir. Eğer tüm işlemler doğru şekilde gerçekleşir ise, sonuç 52.  satırda ekrana yansıtılmaktadır. %0.2f ise sonucun sadece virgülden sonra ki sadece 2 basamağın yazılmasını ifade etmektedir.




ALIŞTIRMALAR:

 Bu uygulamaya ek özellikler ekleyebilirsiniz;
1 -uygulama açıldığında 640x480 boyutlarında açılsın.
2 -Boş değer veya string girişlerinde ki hataların birbirinden ayrılması. Örnek olarak ; "1. vize notuna değer girmediniz" veya "Final notu alanı sadece tam sayı içerebilir" gibi hataların yakalanması.
3 - Küsüratı .33 olan değerlerin .50 değerine, .66 olanların iste bir üst tam sayıya yuvarlanması.
4 - Hesapla butonunun yanına "Formu Temizle" butonunun eklenmesi ve tıklandığında formun temizlenmesi.

Bu özellikleri eklerken yaşadığınız problemleri konu altına yorum olarak yazabilirsiniz. Ekip problemlerinize çözüm üretmeye çalışacaktır.

























0 yorum :

Yorum Gönder