7 Mayıs 2014 Çarşamba

PyQt Grid Layout (Izgara Pencere Düzeni)

       Grid Layout yani Izgara Düzeni kareli bir defter gibi düşünülebilir. Temelde her bir karenin içerisine bir parçacık alabilir şekilde düşünebilirsiniz. Bu düzende ayrıca iki veya daha fazla kareyi bir parçacık için de kullanabiliriz. Örneğin birinci satır birinci sütuna ve ikinci satır birinci sütuna birer buton koyup ikinci sütunda ise ilk ve ikinci satırın tamamını kaplayacak şekilde label koyabiliriz. Şekil ile göstermek gerekirse:
Şekle bakıldığında parantezler içinde bazı değerler görülmektedir. Bir parçacık bu pencere düzenine eklenirken bu değerler şu anlama gelmektedir:

addWidget(eklenecek parçacık, başlangıç satırı, başlangıç sütunu, satır genişliği, sütun genişliği)

Yani parametreleri açıklamak gerekirse; ilk parametre ızgara düzenine eklemek istediğimiz parçacığı, başlangıç satırı ve başlangıç sütunu diye belirttiğimiz parametreler bu parçacığın hangi satır ve sütunda olacağını, satır ve sütun genişliği ise başlangıç satırından ve başlangıç sütunundan itibaren parçacığın aşağıya ve sağa doğru kaç satırı ve sütunu kaplayacağını belirtmektedir. Eğer satır ve sütun genişliği 1 olacaksa, yukarıdaki şekilde butonlarda yazdığımız gibi bunu ayrıca parametre olarak belirtmeden de yazabiliriz.

       Bu bilgilendirmeyi de yaptıktan sonra yukarıdaki şekilde görülen tasarıma uygun bir kod yazalım. Bu kodda Labelimizde başlangıçta bir yazı bulunsun. İlk butonumuza tıkladığımızda yazımız değişsin hem de kırmızı olsun, ikinci butonumuza tıkladığımızda da yine yazımız değişsin ve bu kez de rengi mavi olsun.
Yazdığımız kod şöyle:

# !/usr/bin/env python
# -*- coding: cp1254 -*-

from PyQt4.QtGui import *
from PyQt4.QtCore import *

uygulama = QApplication([])
pencere = QWidget()

def kirmiziMetin():
    metin.setText('
Merhaba Dünyalı :)
') def maviMetin(): metin.setText('
Uygar Köroğlu
') metin = QLabel('
PythonDersleri.com
') butonKirmizi = QPushButton('Kırmızı') pencere.connect(butonKirmizi, SIGNAL('pressed()'), kirmiziMetin) butonMavi = QPushButton('Mavi') pencere.connect(butonMavi, SIGNAL('pressed()'), maviMetin) izgara = QGridLayout() izgara.addWidget(metin, 0, 1, 2, 1) izgara.addWidget(butonKirmizi, 0, 0) izgara.addWidget(butonMavi, 1, 0) pencere.setLayout(izgara) pencere.setWindowTitle('PyQt Grid Layout') pencere.setFixedSize(450, 150) pencere.show() uygulama.exec_()
Yazdığımız kodu çalıştırdığımızda karşımıza şöyle bir pencere gelecektir:

Burada sadece farklı olarak yazdığımız yani yeni görmüş olduğumuz kodlara değinmek istiyorum. kirmiziMetin() ve maviMetin() isimlerinde iki tane metot tanımladık, bu metotları kendilerine ait butona tıklandığında çağırarak metin isimli Labelımız üzerindeki değişiklikleri yaptıracağız. Butonlara ait sinyalleri yazarken bağlantılarının son kısımlarında ilgili metodu yazdık. Burada dikkat edilmesi gereken bir durum söz konusu. Burada metotların parantezlerini yazmıyoruz. Bu durum metoda herhangi bir parametre gönderemeyeceğimiz anlamına da geliyor.
Ayrıca pencere.setFixedSize(450, 150) satırı ile penceremizin boyutlarının parametrede belirttiğimiz değerlerde sabit olmasını istiyoruz. Yani program çalıştıktan sonra fare ile köşesine geldiğinizde yeniden boyutlandırmak için çıkan ok işareti gelmeyecek.

       Çalışma Sorusu: Yukarıda yapmış olduğumuz uygulamayı Labelı iki sütunu kaplayacak şekilde ilk satıra, ikinci satırın da birinci sütununa ve ikinci sütununa butonları yerleştirerek değiştirin.

0 yorum :

Yorum Gönder