Paepoi

Paepoi » PyGObject Tips » Gtk(PyGObject) Tips | GtkSettings

Gtk(PyGObject) Tips | GtkSettings

# 最終更新日 2019.08.25

2019 年現在の仕様に追記と書き換え。

GtkSettings
GtkSettings は GdkScreen 内(ウインドウを表示している領域内)の設定です。
暗い外観のダークテーマにするのに必須です。
又アプリ内で使うフォントやタイトルバー右クリックの設定をデフォルトから変更等もできます。
詳しくは devhelp で、プロパティの変更が結構多いので利用する場合は慎重に。
#!/usr/bin/env python3

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

class Win(Gtk.ApplicationWindow):
    '''
        GSettings ではなくこのアプリ内のみ変更されます
        存在しないフォント(編集中含む)はデフォルトが適用される
    '''
    def __init__(self, app):
        Gtk.ApplicationWindow.__init__(self, application=app, title='Py')
        # GtkSettings
        self.settings = Gtk.Settings.get_default()
        # ListBox
        listbox = Gtk.ListBox(selection_mode=Gtk.SelectionMode.NONE)
        # ダークテーマ
        label_dt = Gtk.Label(label='ダークテーマ')
        switch_dt = Gtk.Switch()
        GObject.Binding.bind_property(
            switch_dt, 'active',
            self.settings, 'gtk_application_prefer_dark_theme',
            GObject.BindingFlags.BIDIRECTIONAL )
        hbox = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)
        hbox.pack_start(label_dt, False, False, 0)
        hbox.pack_end(switch_dt, False, False, 0)
        listbox.insert(hbox, 0)
        # font
        label_fn = Gtk.Label(label='font')
        entry_fn = Gtk.Entry(text=self.settings.props.gtk_font_name)
        GObject.Binding.bind_property(
            entry_fn, 'text',
            self.settings, 'gtk_font_name',
            GObject.BindingFlags.BIDIRECTIONAL )
        hbox = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)
        hbox.pack_start(label_fn, False, False, 0)
        hbox.pack_end(entry_fn, False, False, 0)
        listbox.insert(hbox, 1)
        # Pack
        self.add(listbox)
        self.set_border_width(10)
        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)
etc/gtksettings.png
Copyright(C) sasakima-nao All rights reserved 2002 --- 2020.