Oistein Aanensen wrote:

On Tue, 2003-01-14 at 09:44, James Henstridge wrote:

Omar Kilani wrote:


Hello,

I was wondering if someone could advise on a way of doing conditional
colouring of cells. Say I have:

-----|------|
one | four |
-----|------|
two | five |
-----|------|
three| six |

And I wanted to give each cell a different colour (based on its contents
or cell data.) How would I do it?

CellRendererText seems to apply the background/foreground colours to the
whole column.

Do I need to implement my own cell renderer?

I may be able to do it with treeview.get_cell_area, but I'm not sure how
to pass in the GdkRectangle argument.



Simply create a column in your model of type string which contains the colour you want for the cell. Then when setting up the tree view column, map that column to the "cell_foreground" or "cell_background" properties of the cell renderer.


Hi,

I wondered about the same thing some weeks ago. Sorry for being silly,
but I don't understand how that method is going to give you different
colors in individual cells and not just alter the colors in different
columns.

Attached is a simple example that displays each cell in the tree view in different colours, based on data in the tree model.

James.

--
Email: [EMAIL PROTECTED] | Linux.conf.au http://linux.conf.au/
WWW: http://www.daa.com.au/~james/ | Jan 22-25 Perth, Western Australia.

import gtk

rows = [
    ('foo', 'red', 'bar', 'blue'),
    ('baz', 'green', 'foo', 'yellow'),
    ('bar', 'orange', 'baz', 'magenta')
    ]

# set up the data in the model
model = gtk.ListStore(str, str, str, str)
for row in rows:
    iter = model.append()
    model.set_value(iter, 0, row[0])
    model.set_value(iter, 1, row[1])
    model.set_value(iter, 2, row[2])
    model.set_value(iter, 3, row[3])

win = gtk.Window()
win.set_title('Tree cells')
win.connect('destroy', gtk.mainquit)

swin = gtk.ScrolledWindow()
swin.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
win.add(swin)

treeview = gtk.TreeView(model)

# assign model column 0 to the "text" property, and
# column 1 to the "cell_foreground" property.
cell = gtk.CellRendererText()
column = gtk.TreeViewColumn('Column 1', cell, text=0, foreground=1)
treeview.append_column(column)

cell = gtk.CellRendererText()
column = gtk.TreeViewColumn('Column 2', cell, text=2, foreground=3)
treeview.append_column(column)

swin.add(treeview)

win.show_all()

gtk.main()

Reply via email to