Paepoi

Paepoi » PyGObject Tips » GSettings(PyGObject) Tips

GSettings(PyGObject) Tips

# 最終更新日 2026.01.03

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 にて(英語)
GLib – 2.0: GVariant Text Format
#!/usr/bin/env python3

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

from gi.repository import Gio, GLib
 
#
# 文字列の配列、dconf-editor で見ると ['abc', 'def'] みたいな表示
# a が配列の意味、s が文字列
#
settings = Gio.Settings(schema='org.gnome.shell')
favorite = settings.get_value('favorite-apps').unpack()
SM = 'org.gnome.SystemMonitor.desktop'
if SM in favorite:
    print('お気に入りに SystemMonitor が含まれています、取り除きます')
    favorite.remove(SM)
    a = GLib.Variant('as', favorite)
    settings.set_value('favorite-apps', a)
else:
    print('お気に入りに SystemMonitor が含まれていますせん、追加します')
    favorite.append(SM)
    a = GLib.Variant('as', favorite)
    settings.set_value('favorite-apps', a)
# お気に入りを確認
 
#
# タプル、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', '4.0')
from gi.repository import Gtk, Gio

class Win(Gtk.ApplicationWindow):
    '''
        GSettings のバインド(同期)のサンプルコード        
        GnomeTextEditor の行番号表示切り替え、理解り易くするため GUI にしています
        このアプリ、GnomeTextEditor 自体の設定、 dconf-editor すべてで同期します
    '''
    def __init__(self, a):
        Gtk.ApplicationWindow.__init__(self, application=a, title='Py')
        # GtkSettings
        self.settings = Gio.Settings(schema='org.gnome.TextEditor')
        # GnomeTextEditor の行番号
        b = self.settings.get_boolean('show-line-numbers')
        cb = Gtk.CheckButton(label='GnomeTextEditor の行番号を表示', active=b)
        # バインド、最後の引数は Gio.SettingsBindFlags.DEFAULT だけどゼロでいい
        self.settings.bind('show-line-numbers', cb, 'active', 0)
        self.set_child(cb)
 
app = Gtk.Application()
app.connect('activate', lambda a: Win(a).present())
app.run(sys.argv)

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