【问题标题】:tkinter TreeView: disable selection highlighttkinter TreeView:禁用选择突出显示
【发布时间】:2018-05-10 10:00:50
【问题描述】:

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

这是我用来选择项目的代码sn-p:

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 它是黄色的,我点击它以停用它):

【问题讨论】:

  • 我会将选择突出显示颜色更改为黄色。
  • 感谢您的回复。我认为这不会改变任何事情,因为最后一次选择可以有标签(“myselection”,即黄色)或者它不会有标签(即白色)。但是,系统将始终将最后一个标记为颜色(蓝色)并覆盖我的标签...
  • 您能否解释一下,那将如何完成?我在文档中唯一找到的是使用标签,我正面临着上述挑战。
  • ttk::style map Treeview -background [list selected yellow] 。我不是 python 人,所以如果 python/tkinter 用户之一可以转换它并创建一个答案,那就太好了。

标签: python tkinter treeview tk


【解决方案1】:

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

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

显然,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'),

【讨论】:

    【解决方案2】:

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

    只需使用内置选择(使用 shift 或 cmd 选择),然后 mytree.selection() 获取所有选定项目的列表。

    【讨论】:

      猜你喜欢
      • 2011-03-10
      • 2010-10-24
      • 2011-05-31
      • 2014-09-18
      • 2017-01-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多