ttk 树视图: 选中颜色
我在使用ttk的treeview时,选中的行会显示为深蓝色背景,文字是白色的。
如果我用标签来设置行的颜色,比如:
self.tree.item(item, tags=('oddrow'))
然后把这个标签配置成某种颜色,比如:
self.tree.tag_configure('oddrow', background='lightgrey')
当我选择了奇数行时,背景颜色没有变化(依然是浅灰色),而文字从黑色变成了白色。我想知道怎么才能让选中的行背景变成深蓝色,不管这行有没有被打标签。
没有打标签的行显示为黑色背景上的白色文字,选中时则是深蓝色背景上的白色文字。
我试过
ttk.Style().configure('Treeview', selectbackground='blue')
但是没有任何效果。
补充:我想如果在选中某个项目时,把它的标签改成不是奇数行,然后在取消选中时再改回来,这样做虽然可行,但感觉不太优雅。
2 个回答
4
如果你在找如何更改 tkinter treeview 中选中项的颜色,可以看看下面的代码。
你需要修改的是状态 "selected",而不是 "active"。
style = ttk.Style()
style.configure("Treeview",
background="#E1E1E1",
foreground="#000000",
rowheight=25,
fieldbackground="#E1E1E1")
style.map('Treeview', background=[('selected', '#BFBFBF')])
5
根据TkDocs的树形结构教程,你可以:
- 为选中的行创建一个带有你想要颜色的标签
然后,捕捉树形视图中的虚拟事件:
- 当某一行获得焦点时,给它分配这个标签
- 当这一行失去焦点时,取消这个标签的分配
这是我参考的文档中的具体段落:
The treeview will generate virtual events "<TreeviewSelect>", "<TreeviewOpen>"
and "<TreeviewClose>" which allow you to monitor changes to the widget made
by the user. You can use the "selection" method to determine the current
selection (the selection can also be changed from your program).
还有一些来自教程的代码:
tree.tag_configure('ttk', background='yellow')
tree.tag_bind('ttk', '<1>', itemClicked); # the item clicked can be found via tree.focus()
注意:我不确定这样做是否有效。我得找找我之前写的代码,看看我做了什么。