2015-07-25 4 views
3

Я хочу получить нормальный цвет фона виджета (GtkHeaderBar, в данном случае). Я в настоящее время используюКак получить цвет фона виджета в GTK и Python?

style = self.get_titlebar().get_style_context() 

, чтобы получить стиль, и

color = style.get_property("background-color", Gtk.StateFlags.NORMAL) 

, чтобы получить цвет фона, связанный с этим стилем.

Однако он возвращает Gkd.RGBA объект со следующими свойствами:

Gdk.RGBA(red=0.000000, green=0.000000, blue=0.000000, alpha=0.000000) 

Но если я открываю GTK инспектор, выберите HeaderBar, и идет к свойствам стиля, он показывает

background-color | rgb(57,63,63) | gtk-contained-dark.css:1568.29 

Что мне нужно сделать, чтобы получить эти же значения?

Edit:

Я экспериментировал с GtkStyleContext.render_background(), но я не имею никакого успеха:

surfc = Cairo.ImageSurface (Cairo.FORMAT_ARGB32, 10, 10) 
contx = Cairo.Context(surfc) 
style = self.get_titlebar().get_style_context() 
backg = Gtk.render_background(style, contx, 10, 10, 10, 10) 
surfc.write_to_png("test.png") 

Полученный файл test.png является rgba(0, 0, 0, 0) изображение.

ответ

1

Вы должны взглянуть на изменение фонового цвета на css. Существует очень хорошее documentation. Он может быть использован с питоном с

css_provider = Gtk.CssProvider() 
css_provider.load_from_path('application.css') 
Gtk.StyleContext.add_provider_for_screen(
    Gdk.Screen.get_default(), 
    css_provider, 
    Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION 
) 

и CSS файл, как:

GtkHeaderbar { 
    background-color:@theme_bg_color; 
} 

EDIT: Как вы прокомментировали вы не хотите, чтобы изменить цвет фона, но получить значение этого. Вы можете сделать widget.get_style_context().get_background_color(), и он вернет что-то вроде Gdk.RGBA(red=0.913725, green=0.913725, blue=0.913725, alpha=1.000000).

Однако, вы должны отметить, что get_background_color() устарел, так как не существует один цвет фона. Некоторые виджеты используют градиент в качестве фона, поэтому это не лучшее решение для использования этого метода. См. documentation для справки.

+0

К сожалению, я не хочу, чтобы изменить цвет фона с помощью CSS. Я хочу получить текущий фоновый цвет. – user3474251

+0

Yeap, я знаю о 'get_background_color()'. Однако он всегда возвращает 'rgba (0, 0, 0, 0)'. Вероятно, потому что виджет использует градиент ... – user3474251

+0

-1, это не отвечает на вопрос, а 'get_background_color()' устарел, а также не поддерживает фоны, отличные от простых цветов, что не является, если не редко, случай. Большинство кнопок, баров и даже фоновых окон показывают функции градиента в настоящее время. – ElementW

0

Если кто-то заинтересован, я думаю, что проблема лежит здесь:

backg = Gtk.render_background(style, contx, 10, 10, 10, 10) 

в то время как он должен быть:

backg = Gtk.render_background(style, contx, 0, 0, 10, 10) 

 Смежные вопросы

  • Нет связанных вопросов^_^