14 Ağustos 2014 Perşembe

PyQt Akılsız Diyaloglar

Akılsız diyaloglara neden akılsız diyalog denildiğinden çok bu diyalogların çalışma şekline değinelim. Akılsız diyaloglarda parçacıkların değerleri çağırıcı işlev tarafından ayarlanır ve yapılan değişiklikler de çağırıcı işlev tarafından yakalanır. Bu diyaloglar yalnızda parçacıkları ekranda görüntüleme işlevi görür. Ayrıca bu penceredeki işlem tamamlanmadan bu pencereyi çağıran ana pencerede başka bir işlem yapılamaz. Öncelikle açılan akılsız diyalog kapatılmalıdır.

Şimdi ana penceremiz üzerinde var olan bir label'ımızın içindeki yazının rengini bir alt pencere ile seçebileceğimiz bir örnek kod yazalım:
from PyQt4.QtGui import *
from PyQt4.QtCore import *

simgeler = 'D:/Simgeler/orange-moonlight-icons/png/64x64/'
# simgeler => http://dryicons.com/free-icons/preview/orange-moonlight-icons/

class yaziRengiDlg(QDialog):
    def __init__(self, parent=None):
        super(yaziRengiDlg, self).__init__(parent)
        izgara = QGridLayout()
        izgara.addWidget(QLabel('Yazı Rengi: '), 0, 0)
        self.yaziRengiListe = QComboBox()
        self.yaziRengiListe.addItems(('Red', 'Blue', 'Green', 'Yellow', 'Brown'))
        izgara.addWidget(self.yaziRengiListe, 0, 1)

        onayButonu = QPushButton('Tamam')
        redButonu = QPushButton('İptal')
        onayButonu.setDefault(True)

        butonKutusu = QHBoxLayout()
        butonKutusu.addWidget(onayButonu)
        butonKutusu.addWidget(redButonu)
        izgara.addLayout(butonKutusu, 1, 0, 1, 2)

        self.connect(onayButonu, SIGNAL('pressed()'), self.accept)
        self.connect(redButonu, SIGNAL('pressed()'), self.reject)

        self.setLayout(izgara)
        self.setWindowTitle('Yazı Rengini Seç')
        self.setWindowIcon(QIcon(simgeler + 'paint_brush.png'))

class akilsizDiyaloglar(QDialog):
    def __init__(self, parent=None):
        super(akilsizDiyaloglar, self).__init__(parent)
        self.yaziRengi = 'Blue'
        self.metin = 'PythonDersleri.com'
        self.label = QLabel(self.metin % self.yaziRengi)
        kutu = QVBoxLayout()
        kutu.addWidget(self.label)
        yaziRengiButonu = QPushButton('Yazı Rengini Değiştir')
        self.connect(yaziRengiButonu, SIGNAL('pressed()'), self.yaziRengiDegistir)
        kutu.addWidget(yaziRengiButonu)

        self.setLayout(kutu)
        self.setWindowTitle('Akılsız Diyaloglar')
        self.setWindowIcon(QIcon(simgeler + 'page.png'))

    def yaziRengiDegistir(self):
        diyalog = yaziRengiDlg()
        yaziRengiIndis = diyalog.yaziRengiListe.findText(self.yaziRengi)
        diyalog.yaziRengiListe.setCurrentIndex(yaziRengiIndis)
        if diyalog.exec_():
            self.yaziRengi = diyalog.yaziRengiListe.currentText()
            self.label.setText(self.metin % self.yaziRengi)

uygulama = QApplication([])
anaPencere = akilsizDiyaloglar()
anaPencere.show()
uygulama.exec_()
Bu programı çalıştırdığımızda ve "Yazı Rengini Değiştir" butonuna tıkladığımızda şu şekilde bir pencere gelecektir.

Burada da farklı olarak yazmış olduğumuz kodlardan bahsedelim.

4. Satır = Bu satırda simge dosyalarımın bulunduğu dizinin yolunu bir değişkene atadık. Programımızda kullandığımız simgeleri 5. satırda belirtmiş olduğumuz linkten ücretsiz temin edebilirsiniz.
30 ve 46. Satır = Bu satırlarda belirtilen QIcon nesneleri ile pencerelerin sol üst köşesinde görünen simgeleri belirledik.
51. Satır = Bu satır ile alt pencere açıldığında ana penceredeki yazının renginin seçili olarak alt pencerede gelmesini istedik.
18. Satır = Izgara pencerenin en altına yerleştirdiğimiz yatay buton kutumuzda "Tamam" butonunu ön tanımlı olarak belirledik. Bu tarz butonlar genellikle programların sağ alt köşesine yerleştirilir. Aynı hizanın sol tarafı boş kalmaktadır. Bunu sağlamak için 20. satırdan sonra butonKutusu.addStretch() kodunun eklenmesi yeterli olacaktır. Değişikliği farkedebilmek için pencerenin boyutunu artırmanız yeterli.
25 ve 26. Satır = Diyalog pencereleri kapatıldığında geri değer döndürürler. Bu değerler 0 ve 1'dir (accept ve reject). Biz buradan dönen 1 değerini "Tamam" butonuna atadık. Bunun anlamı o pencerede yapılan değişikliklerin uygulanacağı anlamına gelmektedir.


Kaynaklar:
-Mustafa Başer - Python Kitabı

0 yorum :

Yorum Gönder