You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何移除Tkinter TreeView选中行时的点框高亮效果

嘿,我完全懂你遇到的这个困扰——当TreeView选中行时,第一列(就是那个默认自带的、不是通过columns参数定义的列)上出现的点框高亮,确实会破坏界面美感,尤其是当这一列还有图片的时候!

其实这个问题的根源是:TreeView默认的第一列的焦点样式是由ttk主题控制的,和你自己添加的列样式不统一。不过解决起来很简单,我们只需要自定义一个TreeView样式,把焦点状态下的边框去掉就行。

下面是具体的实现步骤,结合你的代码片段来修改:

  1. 首先创建自定义的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')])
  1. 然后在创建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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:49:00