Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ttk treeview: alternate row colors

How can I set a style for treeview widgets so that alternate rows have different background colors, for example, rows 1,3,5 have white backgrounds and rows 2,4,6 have light blue-grey backgrounds?

I'd also like to set gridlines.

like image 434
foosion Avatar asked Oct 24 '11 16:10

foosion


2 Answers

I had this same issue a few months ago.

From the tk docs:

You can assign a list of tags to each item using the "tags" 
item configuration option (again, when creating the item or later on).

Tag configuration options can then be specified, which will then 
apply to all items having that tag.

Basically, you apply one tag to all of the odd-numbered rows, a different tag to each of the even-numbered rows, and then configure the tags.


When you create the items inside the treeview, add tags to them:

tree.insert('', 'end', text = 'your text', tags = ('oddrow',))

This code creates an element in tree, and the tags argument assigns the tag 'oddrow' to the element.

Once you've created all your elements with 'oddrow' and 'evenrow' tags, you can color the tags:

tree.tag_configure('oddrow', background='orange')
tree.tag_configure('evenrow', background='purple')
like image 89
Matt Fenwick Avatar answered Oct 13 '22 01:10

Matt Fenwick


I realise this is an old question but just for the record configuring the tags just after creating the tree (i.e. when no items have yet been added to it) also works. As items get inserted later on they will be given the background colour appropriate to their 'oddrow' or 'evenrow' tag.

like image 30
Colin McPhail Avatar answered Oct 13 '22 00:10

Colin McPhail