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.
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?
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()