PyGTK Colores por defecto

Me he encontrado con un pequeño problema al intentar modificar los colores de los campos de MCM ya que es bastante complicado encontrar los colores por defecto utilizados por el tema. El problema se acentuaba al utilizar temas oscuros ya que se modificaban los colores de la aplicación para pintar los campos con fondo blanco.

Un poco de trial & error y esto es lo obtenido:

class DefaultColorSettings(object):
    def __init__(self):
        def_settings = gtk.settings_get_default()
        color_scheme = def_settings.get_property("gtk-color-scheme").strip()
        color_scheme = color_scheme.split("\n")

        settings = {}
        for property in color_scheme:
            # property is of the type key: value
            property = property.split(": ")
            settings[property[0]] = property[1]

        self.tooltip_fg_color = gtk.gdk.color_parse(settings["tooltip_fg_color"])
        self.selected_bg_color = gtk.gdk.color_parse(settings["selected_bg_color"])
        self.tooltip_bg_color = gtk.gdk.color_parse(settings["tooltip_bg_color"])
        self.base_color = gtk.gdk.color_parse(settings["base_color"])
        self.fg_color = gtk.gdk.color_parse(settings["fg_color"])
        self.text_color = gtk.gdk.color_parse(settings["text_color"])
        self.selected_fg_color = gtk.gdk.color_parse(settings["selected_fg_color"])
        self.bg_color = gtk.gdk.color_parse(settings["bg_color"]) 

Básicamente, todos los componentes que se configuran con los temas de GNOME llegan a nuestras aplicaciones a través de gtk.gdk.Screen. Con "settings_get_default" obtenemos distintos aspectos de la configuración del tema: colores, tamaños de iconos, sonidos, etc.

Para lo que nos incumbe ahora, obtenemos "gtk-color-scheme" el cual es un str con los distintos colores. En MCM mi solución fue la de crear una clase DefaultColorSettings y luego utilizar DefaultColorSettings.base_color para redibujar los campos a su estado original cada vez que cambiaba los colores de los mismos.

No hay comentarios:

Publicar un comentario