Receita: TreeView Como "GRID"
author = "Carlos E. C. Leite"
version = "0.1" date = "Date: 2006/12/28" license = "GPL"
O arquivo Glade pode ser baixado aqui
1 import gtk
2 import pygtk
3 import gtk.glade
4 import gobject
5 data = [
6 ['col1 lin1','coluna2', 1,'', '#333', 10 ],
7 ['col1 lin2','coluna2', 2,'green','#ccc', 20 ],
8 ['col1 lin3','coluna2', 3,'','#eee',30 ],
9 ['coluna1','coluna2', 4,'','#fff',40 ]]
10 class gtktreelegal:
11 def __init__(self):
12 self.domainNew=''
13 self.domainNewCustom=''
14 # le arvore XML
15 self.wTree=gtk.glade.XML("treeview.glade")
16 # Inicia janela
17 self.window = self.wTree.get_widget("janela")
18 #COnecta built in handler grt.main_quit
19 self.window.connect("destroy", gtk.main_quit)
20 self.tabela = self.wTree.get_widget("tabela")
21 # definicicao do object MODEL ao qual meu TREEVIEW esta conectado.
22 # Toda altarecao no modelo é seguinda pelo objecto visual .
23 self.modelo = gtk.ListStore(
24 gobject.TYPE_STRING,
25 gobject.TYPE_STRING,
26 gobject.TYPE_UINT,
27 gobject.TYPE_STRING,
28 gobject.TYPE_STRING,
29 gobject.TYPE_UINT)
30 self.tabela.set_model(self.modelo)
31 #Uso 3 argumentos do Column
32 # 1 - Primeiroargumento é o título
33 # 2 - tipo da coluna, como será mostrada
34 # 3 - posicao do dado(text) no modelo.
35 # 4 ... n - Outras propriedades
36 #Coluna 1
37 renderer = gtk.CellRendererText()
38 renderer.set_property("background", "black") # Cor do foreground como propriedade
39 renderer.set_property("foreground", "white") # Cor do foreground como propriedade
40 renderer.set_property('editable', True) # A primeira coluan é editável
41 column = gtk.TreeViewColumn("First Name", renderer,text=0)
42 column.set_sort_column_id(0)
43 self.tabela.append_column(column)
44 # Abaixo é adicionada a coluna 2, com a cor definida pelo meu dado, onde foreground=3 indica que
45 # a cor de fundo esta na quarta coluna do liststore.
46 # e outra maneira de se setar as propriedadesda de cor da coluna.
47 #Coluna 2
48 column = gtk.TreeViewColumn('Titulo Coluna 2', gtk.CellRendererText(), text=1, foreground=3)
49 column.set_sort_column_id(1)
50 self.tabela.append_column(column)
51 #Coluna 3
52 column = gtk.TreeViewColumn('Titulo Coluna 3', gtk.CellRendererText(), text=2, background=4)
53 column.set_sort_column_id(2)
54 self.tabela.append_column(column)
55 #Coluna 4
56 # Para o "progress bar" a p[ropriedade a ser setada é o VALUE e não text.
57 column = gtk.TreeViewColumn('Titulo Coluna 3', gtk.CellRendererProgress() , value=5)
58 column.set_sort_column_id(2)
59 self.tabela.append_column(column)
60 #Sinal de selecao de linha
61 # somente é emitido este sinal, quando uma linha editável e DOBLE clicada
62 self.tabela.connect('row-activated', self.on_row_activated)
63 # OBS: como temos uma coluna editável, não podemos utilizar o sinal "select-cursor-row"
64 # um outro sinal que pode ser utilizado é o cursor-changed, porém é não é passado o PATH
65 # veja on_data_select que difere do on_row_activated
66 # Este sinal é emitido quando dado um único clique em uma linha editável ou não.
67 self.tabela.connect('cursor-changed', self.on_cursor_changed)
68 self.tabela_selection = self.tabela.get_selection()
69 self.tabela_selection.set_mode(gtk.SELECTION_SINGLE)
70 self.fillTable()
71 def on_row_activated(self, widget, path, column):
72 print '----------------------------------------------------------------------------------------------'
73 print "# Duplo Clique recebido - ROW ACTIVATED emitido"
74 model,iter = self.tabela_selection.get_selected()
75 print 'Path= %s , Column= %s' % (path, column)
76 print 'Model = %s ,Iter = %s' % (model,iter)
77 print " COLUNA =0 - DADO = %s " % ( model.get_value(iter,0))
78 print " COLUNA =1 - DADO = %s " % ( model.get_value(iter,1))
79 print '^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^'
80 def on_cursor_changed(self, widget):
81 print '----------------------------------------------------------------------------------------------'
82 print "# Um Unico clique foi recebido - CURSOR CHANGE emitido"
83 model,iter = self.tabela_selection.get_selected()
84 print 'Model = %s ,Iter = %s' % (model,iter)
85 print "COLUNA =0 - DADO = %s " % ( model.get_value(iter,0))
86 print "COLUNA =1 - DADO = %s " % ( model.get_value(iter,1))
87 print '^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^'
88 def fillTable(self):
89 for item in data:
90 self.modelo.append(item)
91 if __name__=="__main__":
92 app=gtktreelegal()
93 gtk.main()
Volta para CookBook.
- Carlos Leite