Как получить цвет выбора виджета Gtk3 с помощью GtkStyleContext

Я пытаюсь получить цвет выбора Gtk3 IconView в python, но я не понимаю, как интерпретировать существующую документацию C++ и как она связана с Python.

Мой текущий код Python выглядит следующим образом:

color = self.iconview.get_style().bg[Gtk.StateType.SELECTED]

Это нормально работает в Ubuntu 12.04 - Gnome/Gtk 3.2, я думаю.

Однако в документации здесь говорится, что get_style устарело с версии 3.0.

В Ubuntu 12.10, использующем последнюю версию GTK, описанное выше не работает — я получаю сообщение об ошибке:

CRITICAL **: StackOverflow protection.  Can't copy array element into GIArgument

В документе сказано, что я должен использовать GtkStyleContext, но как?

Может ли кто-нибудь дать мне конкретный пример Python?


person fossfreedom    schedule 20.10.2012    source источник
comment
В нем говорится, что вместо этого используйте GtkStyleContext. gtk_widget_get_style_context возвращает StyleContext для виджета. gtk_style_context_get_background_color возвращает цвет фона для данного состояния. Одно из состояний называется GTK_STATE_FLAG_SELECTED. Обратите внимание, что я только что взломал это вместе за 1 минуту, никогда раньше не работая с темами/стилями в GTK.   -  person Ancurio    schedule 21.10.2012


Ответы (2)


In C:

GdkRGBA color;
GtkStyleContext *style =
    gtk_widget_get_style_context(iconview);
gtk_style_context_get_background_color
    (style, GTK_STATE_FLAG_SELECTED, &color);

Перевод Python от fossfreedom:

context = self.iconview.get_style_context()
color = context.get_background_color(Gtk.StateFlags.SELECTED)

Похоже, что структура GtkStyle из gtk2 была просто заменена более современным классом GtkStyleContext из gtk3.

person Ancurio    schedule 21.10.2012

Новый ответ: «Вы этого не сделаете». Больше не обязательно использовать один цвет фона.

Согласно документации https://developer.gnome.org/gtk3/stable/GtkStyleContext.html#gtk-style-context-get-background-color:

«Эта функция гораздо менее полезна, чем кажется, и ее не следует использовать во вновь написанном коде. В CSS нет понятия «фоновый цвет», так как фоном может быть изображение, градиент или любой другой шаблон, включая сплошной. цвета."

person atrus    schedule 30.11.2015