Paepoi

Paepoi » PyGObject Tips » GSettings(PyGObject) Tips

Gio(PyGObject) Tips

# 最終更新日 2019.08.25

新規追加

GSettings 基本
#!/usr/bin/env python3

'''
    GNOME の時計を変更するサンプルコード
'''

from gi.repository import Gio

settings = Gio.Settings(schema='org.gnome.desktop.interface')

# 曜日の表示 bool
b = settings.get_boolean('clock-show-weekday')
r = input(f'現在曜日の表示は {b} です、{not b} にしますか[Y/n]? :')
if r.lower() == 'y':
    settings.set_boolean('clock-show-weekday', not b)

# 12h 24h  切り替え str
s = settings.get_string('clock-format')
t = '24h' if s == '12h' else '12h'
r = input(f'現在時刻の表示は {s} です、{t} にしますか[Y/n]? :')
if r.lower() == 'y':
    settings.set_string('clock-format', t)

GSettings バリアント値
GVariant は GLib の項目ですがたぶんココでしか使わないので
詳しいことは以下の URL にて
GVariant Format Strings: GLib Reference Manual
#!/usr/bin/env python3

'''
    Gedit のプラグインと Nautilus の初期サイズを変更します
    問題ないものを選んだつもりですが動かした場合は各自で元に戻してください。
'''

from gi.repository import Gio, GLib

#
# 文字列の配列、dconf-editor で見ると ['abc', 'def'] みたいな表示
# a が配列の意味、s が文字列
#
settings = Gio.Settings(schema='org.gnome.gedit.plugins')
plugins = settings.get_value('active-plugins').unpack()
print(plugins)
if 'spell' in plugins:
    print('Gedit プラグインに spell が含まれています、取り除きます')
    plugins.remove('spell')
    a = GLib.Variant('as', plugins)
    settings.set_value('active-plugins', a)
else:
    print('Gedit プラグインに spell が含まれていますせん、追加します')
    plugins.append('spell')
    a = GLib.Variant('as', plugins)
    settings.set_value('active-plugins', a)
# Gedit の設定を開いて確認


#
# タプル、dconf-editor で見ると (300, 240) みたいな表示
# タプルは Python のものがそのまま使える、i は整数
#
settings = Gio.Settings(schema='org.gnome.nautilus.window-state')
w, h = settings.get_value('initial-size').unpack()
print(f'width={w} height={h}')
if h == 400:
    print('Nautilus のサイズを 890x550 (default) に変更します')
    d = GLib.Variant('(ii)', (890, 550))
    settings.set_value('initial-size', d)
else:
    print('Nautilus のサイズを 400x400 に変更します')
    d = GLib.Variant('(ii)', (400, 400))
    settings.set_value('initial-size', d)
# Nautilus で Ctrl+N を押して確認

GSettings のバインド
#!/usr/bin/env python3

import sys, gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, GObject, Gio

class Win(Gtk.ApplicationWindow):
    '''
        GSettings のバインド(同期)のサンプルコード
        理解り易くするため GUI にしています
        Gedit の行番号表示をこのアプリ、Gedit 自体の設定、 dconf-editor すべてで同期します
    '''
    def __init__(self, app):
        Gtk.ApplicationWindow.__init__(self, application=app, title='Py')
        # GtkSettings
        self.settings = Gio.Settings(schema='org.gnome.gedit.preferences.editor')
        # Gedit の行番号
        cb = Gtk.CheckButton(label='Gedit の行番号を表示する')
        # バインド、最後の引数は Gio.SettingsBindFlags.DEFAULT だけどゼロでいい
        self.settings.bind('display-line-numbers', cb, 'active', 0)
        self.add(cb)
        self.show_all()

class App(Gtk.Application):
    def __init__(self):
        Gtk.Application.__init__(self)

    def do_startup(self):
        Gtk.Application.do_startup(self)
        Win(self)

    def do_activate(self):
        self.props.active_window.present()

app = App()
app.run(sys.argv)

Copyright(C) sasakima-nao All rights reserved 2002 --- 2020.