18.5. Estilo de los Controles

Los siguientes métodos cambian y leen el estilo asociado a un control:

  widget.set_style(style)

  style = widget.get_style()
      

La siguiente función:

  style = get_default_style()
      

obtiene el estilo predeterminado.

Un estilo contiene la información gráfica que necesita un control para dibujarse a sí mismo en sus diferentes estados:

  STATE_NORMAL        # El estado durante la operación normal
  STATE_ACTIVE        # El control está activado, como cuando se pulsa un botón
  STATE_PRELIGHT      # El puntero del ratón está sobre el control
  STATE_SELECTED      # El control está seleccionado
  STATE_INSENSITIVE   # El control está desactivado
      

Un estilo contiene los siguientes atributos:

  fg          # una lista de 5 colores de primer plano, uno para cada estado
  bg          # una lista de 5 colores de fondo
  light       # una lista de 5 colores (claros), creados en el método set_style()
  dark        # una lista de 5 colores (oscuros), creados en el método set_style()
  mid         # una lista de 5 colores (medios), creados en el método set_style()
  text        # una lista de 5 colores para texto
  base        # una lista de 5 colores para bases
  text_aa     # una lista de 5 colores a medio camino entre text/base

  black       # el color negro
  white       # el color blanco
  font_desc   # la descripción de fuente pango predeterminada

  xthickness  #
  ythickness  #

  fg_gc       # una lista de 5 contextos gráficos (primer plano) - creados en el método set_style()
  bg_gc       # una lista de 5 contextos gráficos (fondo) - creados en el método set_style()
  light_gc    # una lista de 5 contextos gráficos (claros) - creados en el método set_style()
  dark_gc     # una lista de 5 contextos gráficos (oscuros) - creados en el método set_style()
  mid_gc      # una lista de 5 contextos gráficos (medios) - creados en el método set_style()
  text_gc     # una lista de 5 contextos gráficos (texto) - creados en el método set_style()
  base_gc     # una lista de 5 contextos gráficos (base) - creados en el método set_style()
  black_gc    # una lista de 5 contextos gráficos (negro) - creados en el método set_style()
  white_gc    # una lista de 5 contextos gráficos (blanco) - creados en el método set_style()

  bg_pixmap   # una lista de 5 pixmaps (de fondo)
      

Cada atributo se puede leer directamente de manera similar a style.black y style.fg_gc[gtk.STATE_NORMAL]. Todos los atributos son de sólo lectura excepto style.black, style.white, style.black_gc y style.white_gc.

Se puede copiar un estilo existente para su modificación posterior con el método:

  new_style = style.copy()
      

que copia los atributos del estilo salvo las listas de contextos gráficos y las listas de colores light, dark y mid (claros, oscuros y medios).

El estilo actual se puede obtener con:

  style = widget.get_style()
      

Para cambiar el estilo de un control (por ejemplo, para cambiar el color de primer plano), se deben usar los siguientes métodos de un control:

  widget.modify_fg(state, color) # parámetros: estado, color
  widget.modify_bg(state, color) # parámetros: estado, color
  widget.modify_text(state, color) # parámetros: estado, color
  widget.modify_base(state, color) # parámetros: estado, color
  widget.modify_font(font_desc) # parámetro: descripción de la fuente
  widget.set_style(style) # parámetro: estilo
      

Cuando se establece el estilo style se reservan los colores del estilo y se crean los contextos gráficos. La mayoría de los controles se redibujan también automáticamente tras cambiar de estilo. Si el estilo style es None entonces el control regresará al estilo predeterminado.

No todos los cambios del estilo afectan al control. Por ejemplo, el cambio del color de fondo de una etiqueta Label no tendrá efecto dado que el control Label no tiene una ventana propia gtk.gdk.Window. El color de fondo de una Etiqueta depende del color de fondo de su control padre. Pero es posible meter la Etiqueta en un control EventBox que añade una ventana y permite así cambiar su color de fondo. En la sección EventBox se proporciona un ejemplo de esta técnica.