python - tkinter ttk TreeView 彩色行

标签 python tkinter treeview ttk

我正在尝试使用标签和 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/

相关文章:

python - 如何为 python 2.6 安装 pip?

python-2.7 - Python Tkinter 实例没有属性 'tk'

python - Tkinter - 将多列添加到 Treeview

python - 艰苦学习 Python 练习 5 EC4

python - Kivy - 如何在循环中调用trigger_action()并使其正常运行?

python - 像 QTextEdit 这样的 QWidget 会自动将其高度包装到其内容中?

python - tkinter Canvas 窗口无法从Powershell打开

python - 计算适合 Tkinter 中列表框可视区域的项目数量

python - 如何通过标签更改Treeview中项目的背景/前景?

WPF TreeView 想要在选择父级时选择第一个子级