Crear  Editar  FrontPage  Indexes  Buscar  Cambios  History  RSS  Login

tut-treeview-renderer-bold

Cómo poner una fila entera en negrita o coloreada

Esta resulta ser una pregunta frecuente, por eso la comentamos aquí. Tenemos dos métodos como vimos anteriormente: podemos usar funciones sobre datos de celda, comprobar en cada caso si la fila debe ser resaltada de alguna forma (coloreada, negrita...), y asignar las propiedadees del CellRenderer en consecuencia (y deactivarlas se quiere un aspecto normal); o podemos usar atributos. Seguramente el uso de funciones sobre datos de celda no sea la mejor elección en este caso.

Si lo único que se quiere es que las líneas alternen el color de fondo para que el usuario distinga que datos pertenecen a cada fila en árboles muy grandes, entonces no hay que preocuparde de comentado antes. En su lugar asignaremos la regla de TreeView como se describe en Look & Feel de un TreeView, y todo se hará de forma automática, con colores que sigan el tema instalado (a no ser que dicho tema deactive esta opción, claro).

En el resto de casos, la mejor forma de hacer esto es usando atributos. La forma más sencilla es asignando el atributo "background" y añador una columna al modelo que determine cuando una fila debe ser coloreada y finalmente conectarla al atributo "background_set":

liststore = Gtk::ListStore.new(String, String, TrueClass)

# Agrega una fila con algunos datos
iter = liststore.append
iter[0] = "Joe"
iter[1] = "Average"
iter[2] = false

# Agrega una segunda fila
iter = liststore.append
iter[0] = "Jane"
iter[1] = "Common"
iter[2] = true

view = Gtk::TreeView.new(liststore)

# Crea un renderer con la propiedad background adignada
renderer = Gtk::CellRendererText.new
renderer.background = "pink"

# Añade las columnas, con la propiedad background_set enlazadas a la columna apropiada
col = Gtk::TreeViewColumn.new("First Name", renderer, :text => 0, :background_set => 2)
view.append_column(col)

col = Gtk::TreeViewColumn.new("Last Name", renderer, :text => 1, :background_set => 2)
view.append_column(col)

Otra solución, si se quiere tener un color de fondo diferente, sería añadir una segunda columna listando el color de fondo deseado, y enlazar el atributo background a esa columna en lugar de enlazarlo directamente al CellRenderer. Hay que tener en cuenta que este método puede usarse con cualquier atributo que proprocione el correspondiente loquesea-set; p.e. foreground o weight.

Como norma general, no se debe cambiar el color del texto o del fondo de una celda si no hay una buena razón para ello. Citando a Havoc Pennington: "Ya que los colores en GTK+ representan un tema que el usuario a elegido, nunca debes asignar colores por motivos estéticos. Si al usuario no le gusta Gtk+ Gray, él mismo lo cambiará por un naranja brillante."

Ultimas actualizaciones:2011/06/11 13:35:02
Clave:
Referencias:[tut-treeview]