associação pythonbrasil[11] django zope/plone planet Início Logado como (Entrar)

Revisão 1e 2008-03-08 03:25:48

Excluir mensagem

MudarCorDeCelulaEmTreeview

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:

   1 renderer = gtk.CellRendererText()
   2 renderer.set_property('cell-background', 'yellow')

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