Получите цвета темы GTK + с помощью самоанализа Python и GObject - PullRequest
7 голосов
/ 28 июня 2011

С введением самоанализа GObject исчез доступ к цветам тем через метод widget.get_style().Меня интересует, как получить цвета темы, когда GTK + используется посредством самоанализа GOBject.Решение должно предпочтительно работать с обеими версиями (2 и 3), но решение для каждой из них также приемлемо.

1 Ответ

6 голосов
/ 17 июля 2011

Я не уверен, как получить его из gtk + -2.0, если только вы не используете чистую среду gtk + -2.0, и в этом случае я думаю, что старые методы GtkStyle работают.например, если вы не используете среду Gtk-3.0, такую ​​как gnome-shell

import gi
# make sure you use gtk+-2.0
gi.require_version('Gtk', '2.0')
from gi.repository import Gtk

window = Gtk.Window()

...

style = window.get_style()
print style.lookup_color('fg_color')

Я думаю, что она все равно должна работать в среде gtk + -2.0.Я не знаю наверняка, так как моя система работает под управлением gnome-shell, и не могу легко попробовать это.

Однако этот метод устарел и заменен на GtkStyleContext.Если я использую приведенный выше код в среде gtk + -3.0, такой как gnome-shell, он запустится, но не предоставит мне информацию, которая мне нужна.Я получаю

(False, <Gdk.Color(red=0, green=0, blue=0)>)

РЕДАКТИРОВАТЬ: Оглядываясь назад, я думаю, что выше все еще дает правильную информацию.Цвет для fg_color не найден, о чем свидетельствует первая запись в результате кортежа, которая является False.Также окно должно быть видимым, чтобы можно было найти цвета.

Если я хочу получить информацию о цвете, я хочу использовать новый GtkStyleContext, например

import gi
# make sure you use gtk+-3.0
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk

window = Gtk.Window()

...

style_context = window.get_style_context()
print style_context.lookup_color('fg_color')

, это даст мне реальные данные, который говорит мне, что 'fg_color' был найден, потому что первая запись в кортеже - True.

(True, <Gdk.Color(red=0.000000, green=0.000000, blue=0.000000, alpha=1.000000)>)

Я надеюсь, что это отвечает на ваш вопрос.

...