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