pythontkintertreeviewttk

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.


Solution

  • 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')