O widget [http://pygtk.org/docs/pygtk/class-gtktreeview.html gtk.TreeView] permite que mudemos várias propriedades das suas células. Aqui, explicaremos como mudar a cor de fundo da célula, mas a "lógica" por trás de nossos exemplos se aplica a praticamente qualquer propriedade de célula.
A cor de fundo de uma célula é definida pela propriedade "cell-background" do objeto [http://pygtk.org/docs/pygtk/class-gtkcellrenderer.html gtk.CellRenderer] que desenha a dita cuja. É possível tanto mudar a cor de todas as células renderizadas pelo objeto (o que geralmente implica em mudar a cor uma coluna) quanto só de algumas células. Aqui, veremos três exemplos de como mudar as cores. Começaremos pelo mais simples, que é justamente mudar a cor de todas as células renderizadas por um gtk.CellRenderer específico.
Mudando a cor de uma coluna
As células de uma coluna são geralmente renderizadas por um único gtk.CellRenderer. Podemos definir a cor das células desenhadas por esse renderizador associando uma cor à propriedade "cell-background". A cor é representada por uma string. Para associar a cor, basta chamar o método set_property() como abaixo:
A pequena aplicação de teste abaixo demonstra como fazer isso. Ela cria um gtk.TreeView que mostra um orçamento doméstico. Há duas colunas: a primeira descreve a despesa ou receita; a segunda mostra o valor da movimentação.
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3 # file: color-column.py
4 import gtk
5
6 def get_window(view):
7 window = gtk.Window(gtk.WINDOW_TOPLEVEL)
8 window.add(view)
9 window.show_all()
10
11 def get_store(pairs):
12 store = gtk.ListStore(str, int)
13 for pair in pairs:
14 store.append(pair)
15 return store
16
17 def get_tree_view(store):
18 view = gtk.TreeView(store)
19 column1 = gtk.TreeViewColumn('Movimentação')
20 column2 = gtk.TreeViewColumn('Valor')
21 view.append_column(column1)
22 view.append_column(column2)
23 renderer1 = gtk.CellRendererText()
24 renderer2 = gtk.CellRendererText()
25 # O segredo está aqui:
26 renderer1.set_property('cell-background', 'yellow')
27 renderer2.set_property('cell-background', 'green')
28 column1.pack_start(renderer1)
29 column2.pack_start(renderer2)
30 column1.add_attribute(renderer1, 'text', 0)
31 column2.add_attribute(renderer2, 'text', 1)
32 return view
33
34 pairs = [
35 ('Salário', 800),
36 ('Compras do mês', -150),
37 ('Poupança', -300),
38 ('Ônibus', -150)
39 ]
40
41 store = get_store(pairs)
42 view = get_tree_view(store)
43 window = get_window(view)
44 gtk.main()
Note como nas linhas 26 e 27 nós alteramos a propriedade "cell-background" dos renderizadores. O resultado segue abaixo:
attachment:color-column.png