5 Ağustos 2014 Salı

PyQT Klavye Kısayolları ve QRadioButton

Kes, kopyala, yapıştır, kaydet gibi bazı işlemler için klavyedeki kısayolları kullanmak birçok kullanıcı için vazgeçilmezdir. Grafiksel arayüze sahip programlarda da genellikle fareyi kullanırız; ancak bazı kullanıcılar klavyeyi kullanmak isteyebilirler. Bu durumda programımızı klavyedeki tuşlar ile ilişkilendirmemiz gerekecektir.

Bir örnek ile bunu nasıl yapabileceğimize bakalım. Pencere üzerine bir yazı koyalım ve bu yazının rengini değiştirebileceğimiz seçenekler ekleyelim.  Aynı zamanda kullanıcı bu renk seçeneklerini klavyeden de seçebilsin.

Kodlarımız şu şekilde:
# !/usr/bin/env python
# -*- coding: cp1254 -*-

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

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

        self.renk = 'blue'
        self.yazi = '''PythonDersleri.com'''

        self.metin = QLabel(self.yazi % self.renk)

        aciklamaLabeli = QLabel('Yazı rengi:')

        self.maviButon = QRadioButton('&Mavi')
        self.maviButon.setChecked(True)
        self.yesilButon = QRadioButton('&Yeşil')
        self.kirmiziButon = QRadioButton('&Kırmızı')

        self.butonGrubu = QButtonGroup()
        self.butonGrubu.addButton(self.maviButon)
        self.butonGrubu.addButton(self.kirmiziButon)
        self.butonGrubu.addButton(self.yesilButon)
        self.connect(self.butonGrubu, SIGNAL('buttonClicked(int)'), self.metniGuncelle)

        izgara = QGridLayout()
        izgara.addWidget(self.metin, 0, 1, 4, 1)
        izgara.addWidget(aciklamaLabeli, 0, 0)
        izgara.addWidget(self.maviButon, 1, 0)
        izgara.addWidget(self.yesilButon, 2, 0)
        izgara.addWidget(self.kirmiziButon, 3, 0)

        self.setLayout(izgara)
        self.setWindowTitle('PyQt Klavye Kısayolları')
        self.setFixedSize(300, 100)

    def metniGuncelle(self):
        if self.maviButon.isChecked():
            self.renk = 'blue'
        elif self.kirmiziButon.isChecked():
            self.renk = 'red'
        elif self.yesilButon.isChecked():
            self.renk = 'green'

        self.metin.setText(self.yazi % self.renk)

uygulama = QApplication([])
pencere = Klavye_Kisayollari()
pencere.show()
uygulama.exec_()
Bu kodu çalıştırdığımızda karşımıza şu şekilde bir pencere gelecektir.
Windows işletim sisteminde renklerin baş harflerinin altı çizili olması için çalıştıktan sonra ALT tuşuna basılması gerekiyor.

Şimdi biz burada renkler için klavye kısayolları atamış olduk. Bu kısa yollar Qt'de & işareti ile belirtiliyor. & işaretinden sonra gelen karakteri kısayol olarak atamış oluyoruz. Pencerede de kısayol olarak belirlenmiş olan karakter altı çizili olarak gösteriliyor. Örneğin uygulamamızda yazımızın rengini kırmızı yapmak için klavyeden ALT + K tuşlarına basmamız yeterlidir.

Parçacıklar içinde QRadioButton, QPushButton gibi kısayol olarak atayabileceğimiz bir metin geçmiyorsa ne yapacağımız düşünüyor olabilirsiniz. Bunun çözümü de çok basit. İçinde metin geçmeyen bu parçacıklar için kullanıcıya o parçacığın ne işlev gördüğünü belirtmek amacıyla genellikle bir QLabel kullanılmaktadır. Yapmak istediğimiz kısayolu o labelde belirtip, label ile de o parçacığı ilişkilendirmemiz gerekir. Bunu da labelIsmi.setBuddy(parcacikIsmi) şeklinde belirtmemiz yeterlidir.

Bu programda yeni görmüş olduğumuz bir de Radio Butonların gruplandırılması var. Bu butonları gruplandırmamızın sebebi, çoklu seçimi önleyip, sadece bir tanesinin seçili olmasını sağlamaktır. Eğer penceremizde başka fonksiyonlar için oluşturduğumuz başka radio butonlar yoksa gruplandırmaya gerek yoktur; ancak varsa birbirlerinden ayırt edilmeleri için gruplandırmamız gerekmektedir.

Not: Programınızda kısayolları belirlerken aynı karaktere birden fazla atama yapmamaya dikkat ediniz.


Kaynaklar:
-Mustafa Başer - Python Kitabı

0 yorum :

Yorum Gönder