pythongtkgio

How do I obtain the Gtk3 selection color of a widget using GtkStyleContext


I'm trying to obtain the selection color of a Gtk3 IconView in python but I'm confused how to interpret the existing C++ documentation and how it relates to Python.

My current python code is as follows:

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

This works ok in Ubuntu 12.04 - Gnome/Gtk 3.2 I think.

However the documentation here says get_style is deprecated since 3.0

In Ubuntu 12.10 which uses the latest GTK, the above does not work - I get an error:

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

The document says I should use GtkStyleContext - but how?

Can anyone give me a concrete python example?


Solution

  • 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 translation by fossfreedom:

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

    It appears that the GtkStyle struct from gtk2 was simply replaced with the more modern GtkStyleContext class in gtk3