Hello!
New subscriber here; #pygtk's very own kiko suggested I contribute this
here after I got my answer, and let you work your magic so other people
might not ask this over and over again :)
It's easy to have a gtk.CellRendererText render an integer i from your
model, but it's not so easy to render f(i). In my case I wanted to
store file sizes (in bytes) as integers, but report them in ls -sh's
familiar xx.xM format.
The solution hinges around gtk.TreeViewColumn.set_cell_data_func, using
the -original- CellRendererText you supply to that column, and setting
the renderer's 'text' property.
Here's a quick and dirty example that kinda does an ls -shA . and
reports it in a list. I'm not sure why my sizes are somewhat off, but
that doesn't impact the relevent process. :)
-m
----------------------
#! /usr/bin/env python
import pygtk
pygtk.require("2.0")
import gtk
# set_cell_data_func's callback - reads the size, sets the renderer
def render_filesize(column, cell, model, iter, renderer):
bytes = model.get_value(iter, 1)
if bytes < 1000: sizestr = str(bytes) + 'B'
elif bytes < 1000*2**10: sizestr = '%.2fK' % (bytes/2.0**10)
elif bytes < 1000*2**20: sizestr = '%.2fM' % (bytes/2.0**20)
elif bytes < 1000*2**30: sizestr = '%.2fG' % (bytes/2.0**30)
renderer.set_property('text', sizestr)
win = gtk.Window()
model = gtk.ListStore(str, int)
view = gtk.TreeView(model)
view.append_column(gtk.TreeViewColumn('File', gtk.CellRendererText(), text=0))
size_renderer = gtk.CellRendererText()
size_renderer.set_property('xalign', 1.0)
size_column = gtk.TreeViewColumn('Size', size_renderer, text=1)
# note that I carefully use the column's original renderer and I
# pass it as the user_data argument so the callback has it
size_column.set_cell_data_func(size_renderer, render_filesize, size_renderer)
view.append_column(size_column)
win.add(view)
win.show_all()
win.connect('delete-event', gtk.mainquit)
win.connect('destroy-event', gtk.mainquit)
# get some info to test it
import os
for f in os.listdir('.'):
model.append((f, os.stat(f)[6]))
gtk.mainloop()
----------------------
--
Michael Urman [- [EMAIL PROTECTED] -]
_______________________________________________
pygtk mailing list [EMAIL PROTECTED]
http://www.daa.com.au/mailman/listinfo/pygtk
Read the PyGTK FAQ: http://www.async.com.br/faq/pygtk/