ttk.Treeview 移除行焦点颜色

ttk.Treeview remove row focus color

我想删除 ttk.Treeview 中的焦点颜色,同时保持 table 行可点击并保留指定的背景颜色。这是我的 MWE,树视图为 table:

try:
    import Tkinter as Tk
    from Tkinter import ttk
except ModuleNotFoundError:
    import tkinter as Tk
    from tkinter import ttk

if __name__ == '__main__':
    root = Tk.Tk()
    frame = Tk.Frame(root)

    tree = ttk.Treeview(frame.master, columns=("Col1", "Col2", "Col3"), show="headings")
    tree.heading('Col1', text="Col1")
    tree.heading('Col2', text="Col2")
    tree.heading('Col3', text="Col3")

    tree.tag_configure('even', background="#e8e8e8")

    tree.pack()

    tree.insert("", "end", values=(1, 2, 3))
    tree.insert("", "end", values=(4, 5, 6), tags=('even',))
    tree.insert("", "end", values=(7, 8, 9))
    tree.insert("", "end", values=(10, 11, 12), tags=('even',))
    tree.insert("", "end", values=(13, 14, 15))
    tree.insert("", "end", values=(16, 17, 18), tags=('even',))
    tree.insert("", "end", values=(19, 20, 21))

这可以通过 ttk.Style:

style = ttk.Style(root)
style.map('my.Treeview', background=[], foreground=[])

tree = ttk.Treeview(root, style='my.Treeview', ...)

如果您不想删除选择颜色,而是想更改它:

style.map('my.Treeview', background=[('selected', bgcolor)], 
          foreground=[('selected', fgcolor)])

此外,如果您在执行此操作后丢失了一些其他效果(例如禁用的背景颜色),您可以在更改之前查看映射是什么:

>>> style.map('Treeview')

{'foreground': [('disabled', '#a3a3a3'), ('selected', '#ffffff')],
 'background': [('disabled', '#d9d9d9'), ('selected', '#4a6984')]}

并在映射列表中添加有关禁用颜色的部分:

style.map('my.Treeview', background=[('disabled', '#d9d9d9')], foreground=[('disabled', '#a3a3a3')])