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

PyGtkTreeView

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