如何移除Tkinter TreeView选中行时的点框高亮效果
嘿,我完全懂你遇到的这个困扰——当TreeView选中行时,第一列(就是那个默认自带的、不是通过columns参数定义的列)上出现的点框高亮,确实会破坏界面美感,尤其是当这一列还有图片的时候!
其实这个问题的根源是:TreeView默认的第一列的焦点样式是由ttk主题控制的,和你自己添加的列样式不统一。不过解决起来很简单,我们只需要自定义一个TreeView样式,把焦点状态下的边框去掉就行。
下面是具体的实现步骤,结合你的代码片段来修改:
- 首先创建自定义的ttk样式,修改焦点状态下的边框设置:
# 在创建Treeview之前,先定义样式 style = ttk.Style() # 自定义一个Treeview样式,继承默认样式 style.configure('NoFocusHighlight.Treeview', highlightthickness=0, # 去掉整个Treeview的外层高亮边框 bd=0) # 关键:修改Item在focus状态下的样式,移除点框 style.map('NoFocusHighlight.Treeview', # 你可以保留选中行的背景/文字颜色,按需调整 background=[('selected', '#3399ff')], foreground=[('selected', 'white')], # 把focus状态下的边框设为无,去掉点框 border=[('focus', 'none')])
- 然后在创建Treeview的时候,指定使用这个自定义样式:
f = ttk.Frame(master) f.pack(fill=BOTH, expand=True) self.dataCols = ('Project Name','Status', 'Cores', 'Added date/time') # 这里加上style参数,使用我们自定义的样式 self.tree = ttk.Treeview(f, columns=self.dataCols, style='NoFocusHighlight.Treeview')
如果上面的border设置在你的主题里不生效,可以试试替换成relief属性:
style.map('NoFocusHighlight.Treeview', # ...其他设置不变 relief=[('focus', 'flat')])
这样调整之后,选中行的时候第一列就不会再出现那个烦人的点框高亮了,同时还能保留选中行的背景色(如果你需要的话)。
内容的提问来源于stack exchange,提问作者diegoiva
相关产品推荐
相关产品推荐

