29 Temmuz 2014 Salı

PyQt QSpinBox ve QComboBox

       Şimdiye kadar yaptığımız örneklerde sadece Buton(QPushButton) ve Label(QLabel) kullanmıştık. Bu yazımızda iki tane yeni parçacık daha göreceğiz ve bunların kullanımına bakacağız.  Bu parçacıklarımız döner kutu ve açılan bir liste olan QSpinBox ve QComboBox. QSpinBox sayısal değerleri kullanıcıdan hatasız bir şekilde almak için kullandığımız bir parçacık. QComboBox da kullanıcıya verdiğimiz bir liste üzerinden seçim yapmasını sağladığımız bir parçacıktır.

       Şimdi bu parçacıkları nasıl kullanacağımıza dair bir örnek verelim:

# !/usr/bin/env python
# -*- coding: cp1254 -*-
 
from PyQt4.QtGui import *
from PyQt4.QtCore import *

class QSpinBox_QComboBox(QDialog):
    def __init__(self, parent=None):
        super(QSpinBox_QComboBox, self).__init__(parent)

        self.yil = 2014
        self.mevsim = 'kış'
        self.metin = ('
%d yılının %s mevsimi.
') self.label = QLabel(self.metin % (self.yil, self.mevsim)) self.dKutu = QSpinBox() self.dKutu.setRange(2000, 2050) self.dKutu.setValue(self.yil) self.connect(self.dKutu, SIGNAL('valueChanged(int)'), self.yilDegistir) self.aListe = QComboBox() self.mevsimler = ['sonbahar', 'kış', 'ilkbahar', 'yaz'] self.aListe.addItems(self.mevsimler) self.aListeMevsimIndisi = self.aListe.findText(self.mevsim) self.aListe.setCurrentIndex(self.aListeMevsimIndisi) self.connect(self.aListe, SIGNAL('currentIndexChanged(QString)'), self.mevsimDegistir) izgara = QGridLayout() izgara.addWidget(self.label, 0, 0, 1, 2) izgara.addWidget(self.dKutu, 1, 0,) izgara.addWidget(self.aListe, 1, 1) self.setLayout(izgara) self.setWindowTitle('PyQt QSpinBox ve QComboBox') self.setFixedSize(350, 100) def yilDegistir(self, sinyaldenGelenYil): self.yil = sinyaldenGelenYil self.label.setText(self.metin % (self.yil, self.mevsim)) def mevsimDegistir(self, sinyaldenGelenMevsim): self.mevsim = sinyaldenGelenMevsim self.label.setText(self.metin % (self.yil, self.mevsim)) uygulama = QApplication([]) pencere = QSpinBox_QComboBox() pencere.show() uygulama.exec_()

Bu kodu çalıştırdığımızda karşımıza şöyle bir pencere gelecektir:

Kodlarımıza baktığımızda daha önceki programlarımızdan farklı bir connect kullandığımızı görebilirsiniz. Bunun sebebi bazı QT parçacıklarının sinyal ile birlikte bir de değer göndermesidir. Bu değer sinyalde parametre olarak belirtilmektedir. Bağlantıda yayımlanan sinyal sonucu çalışmasını istediğimiz metotlara bu şekilde değerler gönderebiliriz. Burada yilDegisitir() ve mevsimDegistir() metotlarına int ve QString şeklinde sinyal argümanları gönderdik. Bu sinyal ile gönderdiğimiz int ve QString değerleri parçacıkların o anki değerlerini ifade etmektedir.
       Bu yeni görmüş olduğumuz parçacıkları satırları ile birlikçe açıklayacak olursak:
17. Satır = Bir tane QSpinBox nesnesi oluşturuyoruz.
18. Satır = setRange() metodu ile döner kutunun alt ve üst sınırlarını belirtiyoruz.
19. Satır = setValue() metodu ile program başladığı andaki değerini belirtiyoruz. (Eğer bu değer alt değerden küçükse alt değeri, üst değerden büyükse de üst değeri otomatik olarak yazılır).
20. Satır = Döner kutu üzerinde değer değiştiği anda oluşan sinyale yilDegistir() metodunu bağlıyoruz.

22. Satır = Bir tane QComboBox nesne oluşturuyoruz.
23. Satır = Açılır listenin elemanlarını belirleyebilmek için bir liste oluşturuyoruz
24. Satır = Oluşturduğumuz bu mevsimler isimli listeyi, açılır listenin elemanları olarak gönderiyoruz.
25. Satır = findText ile listedeki bir elemanın konumunu bulduk.
26. Satır = Listenin seçilmiş olan elemanını belirttik.
27. Satır = Açılır listede bir index değişikliği olduğunda mevsimDegistir() metodunun çalıştırılacağı bağlantıyı kuruduk.

Bu tür parçacıkların sinyallarinin ve özelliklerinin akılda tutulması zordur. Bunlar genelikle sürekli kullandıkça akılda kalmaktadır. Ancak unutulması veya öğrenilmesi istenildiğinde hafif bir İngilizce bilgisi ile şuradaki dökümana bakarak anlaşılabilir:
Başlat > Tüm Programlar > PQt GPL vX.X.X for Python vX.X > Documentation > PyQt Class Reference


Kaynaklar:
-Mustafa Başer - Python Kitabı
-PyQt Class Reference

1 yorum :

  1. SIGNAL'in aldığı parametre hep string. Yani bunları ezberlemek gerekiyor ?

    YanıtlaSil