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

Revisão 3e 2007-01-05 18:04:37

Excluir mensagem

PyGtkTreeView

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