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

问题描述 投票:0回答:5

我在尝试从另一个小部件的回调中取消选择

Treeview
项目时遇到问题。我成功地在 ESCAPE 上实现了工作取消选择:

tree.selection_remove(tree.focus())

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

我尝试使用:

tree.selection_clear()

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

重要:使用

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

我的理论是失去焦点是一个问题,因为这是我在相同的代码与 ESCAPE 一起使用但在其他地方不起作用时看到的唯一区别,所以我尝试使用

tree.focus_set()
tree.focus_force()
来获得焦点,但这并没有不改变任何东西。

我不太明白

selection_clear()
应该做什么。由于
ttk.Treeview
ttk.Misc
继承了此方法,因此相关文档很少。我在这里这里找不到任何东西。我唯一发现的是简洁的:

清除当前的 X 选择。

来自 Python shell 帮助(什么是神秘的

X
,坐标?)

那么看似简单的事情如何实现呢?请帮忙,我缺乏想法。

python tkinter treeview ttk
5个回答
11
投票

关于:

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

10
投票

好的。所以答案是:

ttk.Treeview.selection()

它没有在伟大的新墨西哥科技资源中列出,但它确实在最好的教程中提到,并且(当然)在文档中。不知怎的,它仍然逃不过我的视线。

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

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


1
投票
如果你想在一行中完成。

tree.selection_remove(*tree.selection())
    

0
投票
尝试这个看看是否可以清除树视图焦点: my_tree.selection_set('')

© www.soinside.com 2019 - 2024. All rights reserved.