[pygtk] TreeView / ListStore question: tabbing through coulmns

Jordan Callicoat monkeesage at gmail.com
Thu Feb 1 08:24:47 WST 2007


On Wed, 31 Jan 2007 14:38:01 -0800
Seth Mahoney <smahoney at pdx.edu> wrote:
 
> 
>    If your gtk.CellRenderer is called 'renderer', I'd try:
> 
>    renderer.stop_editing(false)
> 

Hi Seth,

Tried that as well. I also tried getting the entry box and using
'get_text' to get the updated text, then emitting 'edited', but that
only got the old value just like 'get_value'. Below is a simplified
example of what I'm trying to do:


==[snip]==

#!/bin/env python

import pygtk
pygtk.require('2.0')
import gtk

def on_edit_item(renderer, row, text, col):
  model[row][col] = unicode(text)

def get_first_selected_row():
  try:
    return treeview.get_selected_rows()[1][0][0]
  except:
    return 0

def on_key_press(widget, event):
  keyname = gtk.gdk.keyval_name(event.keyval)
  if keyname == 'Tab': # event.keyval = 65289
    row, col = widget.get_cursor()
    if row == None:
      row = get_first_selected_row()
    if col == None:
      col = 0
    else:
      col = col.get_data('id')
    if col == colnum - 1:
      nextcol = 0
    else:
      nextcol = col + 1
    print nextcol
    if isinstance(row, (list, tuple)):
      row = row[0]
    renderer = widget.get_column(col).get_data('renderer')

    #  this doesn't work...
    ##tree_iter = model.get_iter(row)
    ##renderer.emit('edited', row, model.get_value(tree_iter, col))
    
    #  this either
    ##renderer.stop_editing(False)
    
    widget.set_cursor(row, widget.get_column(nextcol), True)
    return True # cancel the event

win = gtk.Window(gtk.WINDOW_TOPLEVEL)
win.set_default_size(700, 450)
win.set_title('Test')
win.connect('delete_event', gtk.main_quit)

model     = gtk.ListStore(str, str, str, str, str, str, str, str)
treeview  = gtk.TreeView(model)
colnum    = 8
colwidths = [90, 70, 140, 40, 30, 100, 100, 100]
coltexts  = ['blah'] * 8

for col in range(colnum):
  renderer = gtk.CellRendererText()
  renderer.set_property('ellipsize', True)
  renderer.set_property('editable', True)
  renderer.set_property('xpad', 5)
  if col % 2 == 0:
    renderer.set_property('background', '#DEDEDE')
  else:
    renderer.set_property('background', '#EFEFEF')
  renderer.connect('edited', on_edit_item, col)
  treecol = treeview.insert_column_with_attributes(
              -1, coltexts[col], renderer, text=col
            )
  treecol.set_spacing(10)
  treecol.set_resizable(True)
  treecol.set_alignment(0.5)
  treecol.set_data('id', col)
  treecol.set_data('renderer', renderer)
  treecol.set_min_width(colwidths[col])

model.append(['Foo', 'Bar', 'Baz', 'Bat',
              'Foo', 'Bar', 'Baz', 'Bat'])

treeview.set_cursor(0)
treeview.connect('key_press_event', on_key_press)

win.add(treeview)
win.show_all()
gtk.main()

==[snip]==

Regards,
Jordan


More information about the pygtk mailing list