14
Eyl

PyQt kullanarak bir uygulama geliştiriyor ve bu uygulamaya ayarlar ekliyecekseniz QtCore modülünde bulunanan QSettings sınıfını kullanabilirsiniz. QSettings sınıfı ile *.ini-*.conf uzantılı dosya formatlarında ayarlarınızı saklayabilirsiniz.

QSettings sınıfı ayar dosyanızı olağan şeklinde GNU/Linux sistemlerde /home/kullanıcı/.config/ dizini altında kaydeder. Verdiğiniz parametrelere göre uygulamanızın adıyla bir dizin oluşturulup ayar dosyanız bu dizinde saklanabilir.

#-*- coding:utf-8 -*-
from PyQt4.QtCore import *

ayarlar = QSettings("AyarDizini", u"AyarDosyasi")
ayarlar.setValue(u"PencereAyarlari/PencereBoyutu", QSize(300, 300))

print ayarlar.value(u"PencereAyarlari/PencereBoyutu").toSize()

PyQt4.QtCore.QSize(300, 300) # çıktı

Örneğimizde; ayar dosyasını .config/ içerisine AyarDizini adında dizin oluşturup AyarDosyasi.conf adında olacak şekilde ayarladık. QSettings modülünün setValue() methodu ile değer yazdırmadan ne dizin oluşur, ne de dosya. Örnekte ise bu methodu kullanarak ayar bilgilerimizi yazdırdık ve value() methodu ile bu değerimizi yazdırdık. Burada value() methodu bize QVariant nesnesi döndürür ve biz bunu toSize() methoduyla QSize nesnesine çeviririz. Yazdırdığınız değere göre dönüştürme yapmanız gerekir. Bunun için QVariant dökümanını inceliyebilirsiniz.

Bu örnekte dikkat edilecek nokta “PencereAyarlari/PencereBoyutu” kısmıdır. Bu string değer ile ayar dosyamızda PencereAyarlari adında bir grup oluşturmuş ve bu grubun bir üyesi olarak PencereBoyutu‘nu eklemiş olduk. PencereBoyutu’nun değerini ise QSize(300, 300) olarak atamış olduk. Bu kodun ayar dosyasındaki çıktısı ise şöyle olur:

[PencereAyarlari]
PencereBoyutu=@Size(300 300)

Eğer setValue() methodunu kullanırken bölü(/) karakteriyle gruplamayı istemiyorsanız beginGroup() methoduyla grup oluşturabilirsiniz. Devamında yazacağınız değerlerde sadece ayarın ismini ve değerini girerek grup üyesi ayarları tanımlayabilirsiniz. Gruba son vermek için ise endGroup() methodunu kullanabilirsiniz.

#-*- coding:utf-8 -*-
from PyQt4.QtCore import *

ayarlar = QSettings("AyarDizini", u"AyarDosyasi")
ayarlar.beginGroup("PencereAyarlari")
ayarlar.setValue("PencereBoyutu", QSize(300, 300))
ayarlar.endGroup()

print ayarlar.value(u"PencereAyarlari/PencereBoyutu").toSize()
# veya
ayarlar.beginGroup("PencereAyarlari")
print ayarlar.value(u"PencereAyarlari/PencereBoyutu").toSize()
ayarlar.endGroup()

PyQt4.QtCore.QSize(300, 300) # çıktı

Genelde setValue() ile değer tanımladığınızda ayar dosyaya yazılır ve okunmaya hazır hale getirilir. Ancak herhangi bir nedenden dolayı dosyaya yazma işlemi yapılmıyorsa(Hata oluşmadıysa) sync() methodunu kullanarak senkronizasyon işlemi yapabilirsiniz.

Bir ayarı silmek istiyorsanız value() methodunu kullandığınız mantıkla remove() methodunu kullanarak ayar silebilirsiniz.

ayarlar.remove("PencereAyarlari/PencereBoyutu")
# veya
ayarlar.beginGroup("PencereAyarlari")
ayarlar.remove("PencereBoyutu")
ayarlar.endGroup()

Windows’ta ise QSetting sınıfı ayarları regeditte tutar, ama deneyimime dayanarak regedit kaydının sorunlu olduğunu söyleyebilirim. Bu yüzden Windows için de *.ini dosyası kullanmak isteyebiliriz. O zaman QSettings nesnemizi tanımlarken şu şekilde yazmalıyız.

ayarlar =  QSettings("DosyaYolu\dosya.ini", QSettings.IniFormat)

QSettings’e verdiğimiz ilk parametre dosya yolunu, ikinci parametre ise ayar formatının nasıl olacağını belirtir. Burada QSettings.IniFormat ile bir *.ini dosyası formatında olmasını sağladık.

Ayar dosyasının nerede tutulduğunu fileName() methoduyla öğrenebilirsiniz. Bu bilgiyle başlangıç ayarlarını yazmak için dosyanın varlığını kontrol etmenize olanak tanımış olur…

Bu yazı Creative Commons-BY-SA ile lisanslanmıştır. Bu yazıyı ilk sahibini belirtmek ve aynı lisansla dağıtmak koşuluyla kullanabilirsiniz.

Benzer Yazılar:

  1. QThread ile QProgressBar Kullanımında Uygulamanın Çökmesi
26
Ağu

Uzun uğraşlar sonucunda yeni sürümü yayınlamaktan mutluluk uyuyorum :) Bu sürümde Virux u platform bağımsız olarak sunuyorum… Bu sürümle gelen yenilikler ise şöyle:

* Yeni bir dialog eklendi.
* Sistem menüsüne Kapat ve Açılışta başlat seçeneği eklendi.
* Bu ayarların kaydedilmesi için QSettings sınıfı kullanıldı.
* Dialogların Escape tuşuyla kapanması önlendi. Bu yüzden uygulama kapanıyordu.

En son maddeyle beraber PyQt bilen arkadaşların katkı sağlamasında gerekli şartlara bir yenisi daha eklenmiş oldu.

Her QDialog’u genişleten sınıfınızda bu şekilde bir method tanımlanması gerekmektedir.

def keyPressEvent(self, event):
    if event.key() == Qt.Key_Escape:
        pass

Qt.Key_Escape i kullanabilmek için QtCore modülünde bulunan Qt’yi import etmeniz gerekmektedir…

Unutmayın QDialog’u miras alan sınıfınızın adı DMessage olmalıdır; Python dosyasının adı önemli değildir…

Yeni sürüme buradan ulaşabilirsiniz. Yalnız Windows kullanıcıları için derlenmiş halini veremiyorum. Çünkü derlemeden sonra bir takım hatalar oluşuyor.

Windows sisteminizde Python ve PyQt kurulu ise virux.py dosyasını virux.pyw yaparak çalıştırınız ki; açılışta çalıştır seçeneğini aktif yapınca işletim sisteminiz açılınca konsol çıkmasın…

Dialog olarak katkı sağlamak isterseniz belirtilen kurallara uyarak yazdığınız kodları iletişim sayfasından ya da bu yazıya yorum yazarak ulaştırabilirsiniz. Python dosyanıza __author__ değişkeni tanımlayıp isminizi yazmanız da katkıyı yapanın kim olduğunu belirtecektir…

Yazım hatası varsa bildiriniz.
Bu yazı Creative Commons-BY-SA ile lisanslanmıştır. Bu yazıyı ilk sahibini belirtmek ve aynı lisansla dağıtmak koşuluyla kullanabilirsiniz.

Benzer Yazılar:

  1. Virux – GNU/Linux için bir antivirüs yazılımı :P