Как изменить цвет фона Treeview
Я здесь, чтобы спросить вас, как изменить фон дерева, я пробовал
ttk.Style().configure("Treeview", background="#383838")
Это отлично работает только для клетки, но остальные Treeview остаются белыми.
Я пытался изменить фон окна, рамка тоже, но это не работает.
Итак, как это сделать, я уверен, что вы знаете.
Пока и спасибо заранее:)
Код
from tkinter import *
from tkinter import ttk
p=Tk()
separator = PanedWindow(p,bd=0,bg="#202322",sashwidth=2)
separator.pack(fill=BOTH, expand=1)
_frame = Frame(p,bg="#383838")
t=ttk.Treeview(_frame)
t["columns"]=("first","second")
t.column("first",anchor="center" )
t.column("second")
t.heading("first",text="first column")
t.heading("second",text="second column")
t.insert("",0,"dir1",text="directory 1")
t.insert("dir1","end","dir 1",text="file 1 1",values=("file 1 A","file 1 B"))
id=t.insert("","end","dir2",text="directory 2")
t.insert("dir2","end",text="dir 2",values=("file 2 A","file 2 B"))
t.insert(id,"end",text="dir 3",values=("val 1 ","val 2"))
t.insert("",0,text="first line",values=("first line 1","first line 2"))
t.tag_configure("ttk",foreground="black")
ysb = ttk.Scrollbar(orient=VERTICAL, command= t.yview)
xsb = ttk.Scrollbar(orient=HORIZONTAL, command= t.xview)
t['yscroll'] = ysb.set
t['xscroll'] = xsb.set
ttk.Style().configure("Treeview", background="#383838",foreground="white")
p.configure(background='black')
t.grid(in_=_frame, row=0, column=0, sticky=NSEW)
ysb.grid(in_=_frame, row=0, column=1, sticky=NS)
xsb.grid(in_=_frame, row=1, column=0, sticky=EW)
_frame.rowconfigure(0, weight=1)
_frame.columnconfigure(0, weight=1)
separator.add(_frame)
w = Text(separator)
separator.add(w)
p.mainloop()
3 ответа
Отсутствующий вариант fieldbackground
который я нашел только случайно в примере. Так что, если вы добавите его в объявление стиля
ttk.Style().configure("Treeview", background="#383838",
foreground="white", fieldbackground="red")
это работает, как вы хотите. я использовал red
сделать изменение очень заметным; очевидно, вы захотите изменить это для большей цветовой гармонии.
if flag == False:
tree.insert('', 'end', values=(valx[0], valx[1], valx[2], valx[3]),tags=('odd',))
else:
tree.insert('', 'end', values=(valx[0], valx[1], valx[2], valx[3]),tags=('even',))
tree.tag_configure('odd', background='#008001')
tree.tag_configure('even', background='#FFFF00')
This is a possible solution if the suggested answer by msw does not work for you.
For folks, who are not able to see any changes in terms of coloring the Treeview even after configuring the Style and/or tags, Please refer this video: Youtube link
Easy Fix: Found from Durai comment on this article
Add this line to edit the map configuration in your code:
# set backgound and foreground color when selected
style.map('Treeview', background=[('selected', '#BFBFBF'), foreground=[('selected', 'black')])
Another Hardcode way:
Theme files for ttk are present in C:/< Python installation folder>/tcl/tk8.6/ttk/
vistaTheme.tcl is the default theme that ttk uses.
You need to change/add the below code to the theme file under Treeview(end of file) in order for it to work:
ttk::style map Treeview \
-background {disabled $colors(-frame)\
selected lightblue\
selected $colors(-selectbg)} \
-foreground {disabled $colors(-disabledfg)\
selected black\
selected $colors(-selectfg)}
In my case, I had these lines missing from the theme file so I added them below Treeview and then ran my code, I can finally see colors on my Treeview