我正在尝试使用标签和 tag_configure 为 tkinter 树 View 对象中的行设置颜色。
之前有过关于着色行的讨论,该讨论相当陈旧,似乎不再适用于 Python3:
ttk treeview: alternate row colors
我添加了一个简短的例子。对我来说,所有行都保持白色,与我是在插入命令之前还是之后执行 tag_configure 无关。
import tkinter as tk
import tkinter.ttk as ttk
root = tk.Tk()
w = tk.Label(root, text="Hello, world!")
w.pack()
lb= ttk.Treeview(root, columns=['number', 'text'], show="headings", height =20)
lb.tag_configure('gr', background='green')
lb.column("number", anchor="center", width=10)
lb.insert('',tk.END, values = ["1","testtext1"], tags=('gr',))
lb.insert('',tk.END, values = ["2","testtext2"])
lb.pack()
root.mainloop()
发生了什么变化或我错过了什么?
编辑:
似乎这是一个具有解决方法的新已知错误,但我无法正常工作:
https://core.tcl-lang.org/tk/tktview?name=509cafafae
编辑2:
我现在使用 tk 版本 8.6.10(构建 hfa6e2cd_0, channel conda-forge)和 python 3.7.3。任何人都可以用这个版本的 python 和 tk 重现这个错误吗?
最佳答案
您不再需要使用 fixed_map 错误已在 tkinter 8.6 版中修复。
以下代码使用 tkinter 8.6 和在 Linux 中运行的 python 3.8.2 对我来说很好用。
import tkinter as tk
import tkinter.ttk as ttk
def fixed_map(option):
return [elm for elm in style.map("Treeview", query_opt=option) if elm[:2] != ("!disabled", "!selected")]
root = tk.Tk()
style = ttk.Style()
style.map("Treeview", foreground=fixed_map("foreground"), background=fixed_map("background"))
w = tk.Label(root, text="Hello, world!")
w.pack()
lb= ttk.Treeview(root, columns=['number', 'text'], show="headings", height =20)
lb.tag_configure('odd', background='green')
lb.tag_configure('even', background='lightgreen')
lb.column("number", anchor="center", width=10)
lb.insert('', tk.END, values = ["1","testtext1"], tags=('odd',))
lb.insert('', tk.END, values = ["2","testtext2"], tags=('even',))
lb.insert('', tk.END, values = ["3","testtext3"], tags=('odd',))
lb.insert('', tk.END, values = ["4","testtext4"], tags=('even',))
lb.pack()
root.mainloop()
关于python - tkinter ttk TreeView 彩色行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61373260/