Tkinter Treeview: cambio de color de fondo en cada
Estoy intentando establecer el fondo de un widget Treeview basado en las respuestas proporcionadas aquí.
El problema con esta respuesta es que solo cubre estilos globales. En mi código estoy usando 2-3 Treeviews, cada uno necesita su propio estilo.
En el código proporcionado, quiero establecer el fondo del primer Treeview en blanco y el segundo Treeview en negro.
MCVE:
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
def fixed_map(option, style):
return [elm for elm in style.map("Treeview", query_opt=option) if elm[:2] != ("!disabled", "!selected")]
def set_theme(tv, bg, fg):
style = ttk.Style()
style.theme_use("clam")
style.map("Treeview", foreground=fixed_map("foreground", style), background=fixed_map("background", style))
style.configure("Treeview", background=bg, fieldbackground=bg, foreground=fg)
tree1 = ttk.Treeview(root)
tree1.pack(side="left", fill="both", expand=True)
for i in range(10):
tree1.insert("", "end", text=f"t1 Item #{i+1}")
set_theme(tree1, "white", "black")
tree2 = ttk.Treeview(root)
tree2.pack(side="left", fill="both", expand=True)
for i in range(10):
tree2.insert("", "end", text=f"t2 Item #{i+1}")
set_theme(tree2, "black", "white")
root.mainloop()
davy.ai
El código proporcionado establece el fondo de todas las vistas de árbol en el mismo color, pero si quieres establecer el fondo de cada vista de árbol individualmente, puedes modificar la función
set_theme
. En lugar de llamar astyle.configure("Treeview", background=bg, fieldbackground=bg, foreground=fg)
, puedes llamar astyle.configure(tv, background=bg, fieldbackground=bg, foreground=fg)
, dondetv
es el widget de vista de árbol específico que deseas modificar. Luego, al llamar aset_theme
, puedes pasar el widget de vista de árbol como primer argumento en lugar de usartree1
otree2
. Aquí tienes el código modificado:Ahora,
set_theme(tree1, "white", "black")
establece el fondo de la primera vista de árbol en blanco y el color del texto en negro, mientras queset_theme(tree2, "black", "white")
establece el fondo de la segunda vista de árbol en negro y el color del texto en blanco.