How to fully change the background color on a tkinter.ttk Treeview

zlmonroe picture zlmonroe · May 6, 2017 · Viewed 9.8k times · Source

I have been attempting to make a directory browser for a recent project of mine that I'm developing in python 3.4.4 with tkinter. I do not want the background to be the default color, so I have gone about changing the background of most widgets. I didn't have any trouble until I got to the Treeview. I'm not too good with ttk.Style(), but I still managed to get

ttk.Style().configure("Treeview", background="black",
                foreground="white")

to work, however this only changes the background of the area included in the widget. Error

I checked to see if it was a resizing issue, but everything seems to be in order. I also looked for similar issues online thinking I was doing it wrong and found two links pointing to Bryan Oakley having the same issue back in 2007.

Bryan Oakley Re: how to get a ttk::treeview with no border

how to create a ttk::treeview without a border?

Essentially, the conclusion was that this is a bug when run on windows. Because of this, I'm left with 3 general questions:

Am I just entirely missing something obvious and misunderstanding these posts (crossing fingers here) and if so what am I doing wrong? Or if this was really a bug, has there been any solution to it since 2007? And finally if there has not been any solution, does anyone have a way that they've found to work around the issue, no matter how hacky of a solution?

Answer

j_4321 picture j_4321 · May 7, 2017

To make the background of a Treeview totally black, both the background and the fieldbackground options of the Treeview style need to be set to black.

In addition, not all ttk themes support the fieldbackground option, like the "xpnative" and "vista" themes.

Code:

import tkinter as tk
from tkinter import ttk

root = tk.Tk()

style = ttk.Style(root)
# set ttk theme to "clam" which support the fieldbackground option
style.theme_use("clam")
style.configure("Treeview", background="black", 
                fieldbackground="black", foreground="white")

tree = ttk.Treeview(root)
tree.insert("", 0, "item", text="item")
tree.pack()

root.mainloop()