Örnek GSettings Ayarı Yöneten Python Uygulaması
Tags: python, gsettings, gtk, gnome
Published: 2020-05-26 08:15:56

Bir önceki bölümde basit bir GSettings şeması oluşturmuştuk. Şimdi bu şema kullanarak belirli bir değeri disk üzerinde tutmayı göreceğiz.

## Python ile GTK3 uygulaması geliştirme

Öncelikle Python ile GTK programlamak için PyGTK kütüphanesi kullanılmamakta. Daha doğrusu GTK2 ile birlikte geliştirilen bu kütüphane yerini güncel olarak geliştirilen PyGOBject kütüphanesine bıraktı. Windows üzerinde de GTK3 ile uygulama geliştirilebilmekte fakat biz yine Debian tabanlı sistemlerde örneklerimize devam edeceğiz.

Basitçe kurulum için aşağıdaki paketleri yüklemeniz yeterli:

```bash
sudo apt install python3-gi python3-gi-cairo gir1.2-gtk-3.0
```

Bu adım yerine Pip paket yönetim sistemi ile kurmak isterseniz ise biraz daha geliştirici bağımlıklıklarına ihtiyaç duyuyorsunuz. Fakat şuan basit bir yazı olmasını istediğim için bu bilgiyi burada paylaşmıyorum fakat isteyen [bu bağlantı](https://pygobject.readthedocs.io/en/latest/getting_started.html)dan erişebilir. Zor değil fakat bazı gereksiz paketlerin yüklenmesi gerektirdiği için o paketlerin zorunlu olmadığını belirtmek istedim. Fakat PyGObject'in güncel sürümünü kullanmak istiyorsanız paket yönetim sistemini kullanmanız gerekebilir. Fakat bu durumda ürününüzü yaygınlaştırırken yeni özelliklerin Debian tabanlı işletim sistemi paket yönetim sisteminde olması ilgili işletim sisteminin kararlılığı için daha uygun olacaktır.

## Örnek Python Uygulaması

Örnek Python uygulamamızda ana bileşen olarak boş bir pencere bulunmakta. Bu pencerenin başlığı, kenarlık değeri ve kontol butonu bulunmaktadır. Bu kontrol butonu ise bizim için ayar yapmamızı sağlayan buton olarak düşünebiliriz. Bu botunun içinde bir yazı ve radiobuton olduğunu görebilmekteyiz. Bu butonu kontrol eden 2 adet fonksiyonumuz bulunmakta ki bunlardan birisi mevcut seçili durumu değiştiren diğeri de kontrol eden olarak düşünebiliriz.

```python
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gio, Gtk

class App(object):
    BASE_KEY = "apps.gsettings-ornekuygulama"
    def __init__(self):
        # GSettings anahtarı ve değişimi
        settings = Gio.Settings.new(self.BASE_KEY)
        check_button = Gtk.CheckButton("Mantıksal bir özellik")
        check_button.set_active(settings.get_boolean("ornekozellik"))
        settings.connect("changed::ornekozellik", self.on_degisim_ornekozellik, check_button)
        check_button.connect('toggled', self.on_kontrol_ornekozellik, settings)
        
        # ana pencere bileşeni
        window = Gtk.Window(type=Gtk.WindowType.TOPLEVEL)
        window.set_title('Örnek GSettings denemesi')
        window.set_border_width(64)
        window.connect_after('destroy', self.on_cikis_pencere)
        window.add(check_button)
        window.show_all()
        Gtk.main()
    
    def on_degisim_ornekozellik(self, settings, key, check_button):
        check_button.set_active(settings.get_boolean("ornekozellik"))
        
    def on_kontrol_ornekozellik(self, button, settings):
        settings.set_boolean("ornekozellik", button.get_active())

    def on_cikis_pencere(self, widget, data=None):
        Gtk.main_quit()

if __name__ == "__main__":
    app = App()
```

Yukarıdaki ilgili kod parçacığını bir dosyada herhangi bir yerde kaydedip aşağıdaki gibi çağırdığınızda aşağıdaki görsel gibi bir pencere açılacaktır. Ve butonu açıp kapattığınızda gerçekten de ayarın true ve false olduğunu dconf-editor ile de kontrol edebilirsiniz. Kaydettiğiniz dosya deneme01.py ise aşağıdaki gibi çağırabilirsiniz.

```bash
python3 deneme01.py
```

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/bdzgp6qbtk3jaslw3059.png)

Memento audere semper