如何取消选择Tkinter ttk.Treeview的一个或多个项目?

时间:2018-02-03 01:25:31

标签: python tkinter treeview ttk

我在尝试从另一个小部件的回调中取消选择Treeview项时遇到问题。我设法在 ESCAPE 上实施了一个工作取消选择,按下:

tree.selection_remove(tree.focus())

在绑定到treeview对象本身的回调中。它仅在树视图具有焦点时才起作用(但它可以,这是一种期望的行为)。另一方面,从另一个小部件的回调中尝试相同的方法并不起作用。

我尝试使用:

tree.selection_clear()

按照建议here,但这也不起作用。

重要:在tree.selection_add(iid)的同一通话中选择树视图中的项目。与操纵另一个小部件(组合框,执行调用的小部件是一个框架)相同。基于此,我不认为问题是由于我的代码中的一些愚蠢的错误(一个错字或类似的东西)。

我的理论是失焦是一个问题,因为它是我看到的相同代码与 ESCAPE 之间的唯一区别,而不是其他地方,所以我试图获得焦点tree.focus_set()tree.focus_force(),但这并没有改变任何事情。

我不太清楚selection_clear()应该做什么。由于ttk.Treeviewttk.Misc继承此方法,因此文档很简洁。我无法找到任何内容herehere。我发现的唯一的事情就是简洁:

  

清除当前的X选择。

来自Python shell帮助(隐藏的X,坐标是什么?)

那么如何实现如此简单呢?请帮忙,我不知所措。

2 个答案:

答案 0 :(得分:1)

行。所以答案是:

ttk.Treeview.selection()

它未在the great New Mexico Tech resource中列出,但它在the best tutorial out there中得到提及,(当然)在the docs中。不知怎的,它仍然逃脱了我。

现在,有一种测试选择内容的方法很简单:

if len(tree.selection()) > 0:
    tree.selection_remove(tree.selection()[0])

答案 1 :(得分:0)

那又怎么样:

for item in self.tree.selection():
   self.tree.selection_remove(item)