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

Revisão 1e 2007-01-05 17:54:57

Excluir mensagem

PyGtkTreeView

Receita: TreeView Como "GRID"

Código

__author__ = "Carlos E. C. Leite <caduado@gmail.com>"
__version__ = "0.1"
__date__ = "Date: 2006/12/28"
__license__ = "GPL"
import gtk
import pygtk
import gtk.glade
import gobject
data = [
   ['col1 lin1','coluna2', 1,'', '#333', 10  ],
   ['col1 lin2','coluna2', 2,'green','#ccc', 20 ],
   ['col1 lin3','coluna2', 3,'','#eee',30 ],
   ['coluna1','coluna2', 4,'','#fff',40 ]]
class gtktreelegal:
   def __init__(self):

      self.domainNew=''
      self.domainNewCustom=''
      # le arvore XML
      self.wTree=gtk.glade.XML("treeview.glade")
      # Inicia janela
      self.window = self.wTree.get_widget("janela")
      #COnecta built in handler  grt.main_quit
      self.window.connect("destroy", gtk.main_quit)

      self.tabela = self.wTree.get_widget("tabela")
      # definicicao do object MODEL ao qual meu TREEVIEW esta conectado.
      # Toda altarecao no modelo é seguinda pelo objecto visual .
      self.modelo = gtk.ListStore(
            gobject.TYPE_STRING,
            gobject.TYPE_STRING,
            gobject.TYPE_UINT,
            gobject.TYPE_STRING,
            gobject.TYPE_STRING,
            gobject.TYPE_UINT)

      self.tabela.set_model(self.modelo)
      #Uso 3 argumentos do Column
      # 1 - Primeiroargumento é o título
      # 2 - tipo da coluna, como será mostrada
      # 3 -  posicao do dado(text) no modelo.
      #  4 ... n  - Outras propriedades

      #Coluna 1
      renderer = gtk.CellRendererText()
      renderer.set_property("background", "black") # Cor do foreground como propriedade
      renderer.set_property("foreground", "white") # Cor do foreground como propriedade
      renderer.set_property('editable', True) # A primeira coluan é editável
      column = gtk.TreeViewColumn("First Name", renderer,text=0)
      column.set_sort_column_id(0)
      self.tabela.append_column(column)

      # Abaixo é adicionada a coluna 2, com a cor definida pelo meu dado, onde foreground=3 indica que
      # a cor de fundo esta na quarta coluna do liststore.
      # e outra maneira de se setar as propriedadesda de cor  da  coluna.

      #Coluna 2
      column = gtk.TreeViewColumn('Titulo Coluna 2', gtk.CellRendererText(), text=1, foreground=3)
      column.set_sort_column_id(1)
      self.tabela.append_column(column)

      #Coluna 3
      column = gtk.TreeViewColumn('Titulo Coluna 3', gtk.CellRendererText(), text=2, background=4)
      column.set_sort_column_id(2)
      self.tabela.append_column(column)
     #Coluna 4
      # Para o "progress bar"  a p[ropriedade a ser setada é o VALUE e não text.
      column = gtk.TreeViewColumn('Titulo Coluna 3', gtk.CellRendererProgress() , value=5)
      column.set_sort_column_id(2)
      self.tabela.append_column(column)

      #Sinal de selecao de linha
      # somente é emitido este sinal, quando uma linha editável e DOBLE clicada
      self.tabela.connect('row-activated', self.on_row_activated)
      # OBS:  como temos uma coluna editável, não podemos utilizar o sinal "select-cursor-row"

      # um outro sinal que pode ser utilizado é o cursor-changed, porém é não é passado o PATH
      # veja on_data_select que difere do on_row_activated
      # Este sinal é emitido quando dado um único clique em uma linha editável ou não.
      self.tabela.connect('cursor-changed', self.on_cursor_changed)

      self.tabela_selection = self.tabela.get_selection()
      self.tabela_selection.set_mode(gtk.SELECTION_SINGLE)
      self.fillTable()
   def on_row_activated(self, widget, path, column):
      print '----------------------------------------------------------------------------------------------'
      print "# Duplo Clique recebido - ROW ACTIVATED emitido"
      model,iter = self.tabela_selection.get_selected()
      print 'Path= %s , Column=  %s' % (path, column)
      print 'Model = %s ,Iter =  %s' % (model,iter)

      print " COLUNA =0 - DADO =  %s  " % ( model.get_value(iter,0))
      print " COLUNA =1 - DADO =  %s  " % ( model.get_value(iter,1))

      print '^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^'

   def on_cursor_changed(self, widget):
      print '----------------------------------------------------------------------------------------------'
      print "# Um Unico clique foi recebido - CURSOR CHANGE emitido"
      model,iter = self.tabela_selection.get_selected()
      print 'Model = %s ,Iter =  %s' % (model,iter)
      print "COLUNA =0 - DADO =  %s  " % ( model.get_value(iter,0))
      print "COLUNA =1 - DADO =  %s  " % ( model.get_value(iter,1))
      print '^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^'
   def fillTable(self):
      for item in data:
           self.modelo.append(item)


if __name__=="__main__":
   app=gtktreelegal()
   gtk.main()
Volta para CookBook.
----
Carlos Leite