2016-12-01 16 views
1

У меня возникли проблемы с получением определенных свойств из системы Gtk3 theme css (gtk.css) для рендеринга контекстных компонентов в моем приложении Gtk3 для python.get gtk theme css property from python Gtk3

То, что я из моей системы темы gtk.css является следующим:

entry { 
    ... 
    color: #5c616c; 
    border-color: #cfd6e6; 
    background-color: #ffffff; } 
    entry:focus { 
    background-clip: border-box; 
    color: #5c616c; 
    border-color: #5294e2; 
    background-color: #ffffff; } 
    entry:disabled { 
    color: rgba(92, 97, 108, 0.55); 
    border-color: rgba(207, 214, 230, 0.55); 
    background-color: rgba(255, 255, 255, 0.55); } 
    entry.warning { 
    color: white; 
    border-color: #F27835; 
    background-color: #f7ae86; } 
    entry.warning image { 
     color: white; } 
... 

То, что я хотел бы получить от него тех контекстных цветов, например, background-color от entry.warning и т.д.

Я сделал некоторые исследования, и вот где я застрять:

css_provider = Gtk.CssProvider.get_default() 
warning_color = css_provider.get_style(something to put here) 

Большое спасибо за вашу помощь!

ответ

3

Правильный способ заключается в изменении Gtk.WidgetGtk.StyleContext так, чтобы к нему применялось правило CSS, а затем используйте функции Gtk.render_whatever() для рисования ваших контекстных компонентов.

Например, чтобы сделать фон с таким же стиле, что и warning фона на Gtk.Entry подкласса:

context = my_entry.get_style_context() 
context.save() 
context.add_class('warning') 
Gtk.render_background(context, blah, blah, blah) 
context.restore() 

Обратите внимание, что это не возможно, чтобы получить цвет фонанепосредственно с помощью CSS. Фон CSS может быть цветом, или изображением, или градиентом.

+0

спасибо. Мой следующий вопрос будет заключаться в том, что я хочу использовать контекстный цвет как цвет текста (тег) в виджетах textview, и нет необходимости, чтобы у меня был фактический объект ввода. –

+0

Как я уже сказал, вы не можете надежно получить фоновый цвет, потому что не может быть такого понятия, как «цвет фона» для конкретного виджета. Есть несколько стилей, которые вы можете получить, используя 'context.get_property()'. – ptomato