27 Nisan 2014 Pazar

PyQt Sinyaller ve Slotlar

       Bir kullanıcı program üzerinde fare ya da klavyedeki herhangi bir tuşa tıkladığında sinyaller oluşur. Signal ve Slot Türkçe'ye Sinyal ve Yuva olarak çevrilmektedir. Bu Sinyal ve Yuvalar sayesinde program üzerinde meydana gelen olayları kontrol edebiliyoruz. Yani oluşan bu sinyali veya sinyalleri herhangi bir veya birden fazla metoda yönlendirerek o metot veya metotlardaki işlevlerin gerçekleştirilmesini sağlayabiliriz.

      Bir örnek üzerinden açıklamaya çalışalım. Alt alta bir Label ve bir Buton oluşturalım. Bu butona tıklandığında da Label üzerindeki yazıyı değiştirelim. Kodlarımız şu şekilde:

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

from PyQt4.QtGui import *
from PyQt4.QtCore import *
 
app = QApplication([])
 
window = QWidget()
window.setWindowTitle('PythonDersleri.com')
txtLabel = QLabel('Python Dersleri')
btnButton = QPushButton('Değiştir')
 
 
def changeTxtLabel():
    txtLabel.setText('Python Öğreniyorum')
 
window.connect(btnButton, SIGNAL('pressed()'), changeTxtLabel)
 
dizayn = QHBoxLayout()
dizayn.addWidget(txtLabel)
dizayn.addWidget(btnButton)
 
window.setLayout(dizayn)
window.show()
app.exec_()

Programı bu şekilde çalıştırdığınızda karşınıza şu şekilde bir pencere gelecektir:
Değiştir butonuna tıkladığınızda ise pencere şu şekilde değişecektir:

Şimdi de kodlarda neler yaptığımıza bir bakalım:
1. Satır = Yazdığımız kodların Python kodu olduğunu ve Python'un dizinini belirtiyoruz.
2. Satır = Türkçe karakterlerin desteklenmesini belirttik.
4. ve 5. Satır = Gerekli QT modüllerini programımıza dahil ettik.
7. Satır = Bir QApplication nesnesi oluşturduk.
9. Satır = Bir tane Widget oluşturduk. Butona tıklandığında oluşan sinyal bu widget üzerinden yakalanmaktadır.
10. Satır = Pencerenin başlığının "PythonDersleri.com" olacağını belirttik.
11. Satır = İçeriği "Python Dersleri" olan bir tane Label oluşturduk.
12. Satır = Üzerinde "Değiştir" yazan bir buton oluşturduk.
15. Satır = Burada bir fonksiyon tanımlanmıştır. Bu fonksiyon ile Label'a yeni text atanmaktadır.
18. Satır = btnButton isimli butona basıldığında pressed() sinyali yayınlanır. Bu sinyali window isimli bizim tarafımızdan oluşturulan QWidget'ın connect() metodu ile yakalamaktayız. 3. parametre olarak ise bu butona basıldığında hangi fonksiyonun çağrılacağını söylüyoruz. Bu şekilde butonumuza basıldığında QLabel'ımızın text'i değişecektir.
20. Satır = Bir adet QHBoxLayout oluşturulmakta. Bu layout ile label ve butonumuz yan yana sıralanacaktır. Alt alta sıralamak istiyorsanız QVBoxLayout kullanabilirsiniz.
21. ve 22. Satır = Oluşturduğumuz label ve buton bu layout içerisine yerleştiriyoruz.
24. Satır = Layout'u tanımladığımız window isimli Widget'a atıyoruz.
25. Satır = Window'u görünür yapıyoruz.
26. Satır = Uygulamamızı çalıştırıyoruz.

Alıştırmalar: 
1. Bir dizide sizin tarafınızdan tanımlanmış 10 adet eleman bulunmaktadır. Bu elemanlar her butona basıldığında label'e sırasıyla atanacaktır. Ayrıca üstte label olmak üzere buton ve label'imizin alt alta olması istenmektedir.

2. Çıkış isminde bir buton oluşturun ve bu butona tıklandığında programın kapatılmasını sağlayın.


Kaynaklar:
http://qt.comu.edu.tr/qtgiris/teksayfa/
http://gamzecukurluoz.blogspot.com.tr/2010/03/qt-nedir.html
http://qt-project.org/doc/qt-4.8/signalsandslots.html
Mustafa Başer - Python Kitabı

0 yorum :

Yorum Gönder