tkinter TreeView:禁用选择突出显示

tkinter TreeView: disable selection highlight

我有一个 tkinter TreeView 并使用标签标记多个 selected 项目,如下面黄色所示。不幸的是,无论标签如何,最后单击的项目将始终显示为蓝色。如何防止 TreeView 为最后单击的项目着色?

这是我用于 select 项的代码片段:

def on_click(self, event):
    """Set tag for selected datasets."""

    # Remove 'plotted' tag if existent
    if 'plotted' in self.tree.item(self.tree.selection())['tags']:
        # FIXME: Only remove tag 'plotted'
        self.tree.item(self.tree.selection(), tags=())

    # Select only items that have no children
    elif not self.tree.get_children(self.tree.selection()):
        self.tree.item(self.tree.selection(), tags='plotted')
    self.tree.column('#0', anchor=tk.E)

这是一个示例。请注意,您无法判断 DNTP_iDL_... 是否应该是白色的(b/c 它是黄色的,我单击它以将其停用):

原来我在为多个项目使用标签时走错了路select。

只需使用内置的 selection(使用 shift- 或 cmd-select)然后 mytree.selection() 获取所有 selected 项目的列表。

我知道这是旧的,但我没有找到真正的答案。

经过一些挖掘 - 有可能(不明显但可能):

显然,treeview 有单独的颜色系统 - 通过样式和通过标签(使用 tree.tag_bind 更动态地添加基本时尚的东西)。但是,我的测试表明,如果您单击该项目(此问题的主要问题),标签将无法在框中使用。

这是我想出的解决方案:

root = tk.Tk()
style = ttk.Style(root)
style.theme_use("clam")
style.map("Treeview",
          background=[
              ('selected', '!focus', 'yellow'),
          ])
# here is your treeview widgets and stuff
root.mainloop()

可能有更优雅的解决方案...但我没有找到。

希望对大家有所帮助!

更新

我发现当您单击该项目然后转到另一个应用程序 (alt+Tab) - 您会看到黄色选择。

我已经通过将背景参数更改为:

解决了这个问题
# ('selected', '!focus', 'yellow'),
('selected', 'invalid', 'yellow'),