如何取消选择 Tkinter ttk.Treeview 的一个或多个项目?
How to deselect an item (or items) of a Tkinter ttk.Treeview?
我在尝试从另一个小部件的回调中取消选择 Treeview
项目时遇到问题。我设法在 ESCAPE 上实现了一个有效的取消选择 press with:
tree.selection_remove(tree.focus())
在绑定到树视图对象本身的回调中。它仅在树视图具有焦点时才起作用(但没关系,这是一种期望的行为)。另一方面,尝试从另一个小部件的回调中进行相同的操作是行不通的。
我尝试使用:
tree.selection_clear()
如推荐的那样,但这也不起作用。
重要:使用 tree.selection_add(iid)
从同一调用中选择树视图中的项目是有效的。与操纵另一个小部件(一个组合框,执行调用的小部件是一个框架)相同。基于此,我不认为问题是由于我的代码中的一些愚蠢的错误(拼写错误或类似的错误)引起的。
我的理论失焦是一个问题,因为这是我看到的唯一区别,当相同的代码与 ESCAPE 一起工作时,而不是其他地方,所以我试图获得焦点使用 tree.focus_set()
和 tree.focus_force()
,但这并没有改变任何东西。
我不太明白 selection_clear()
应该做什么。由于 ttk.Treeview
从 ttk.Misc
继承了此方法,因此相关文档很少。我在上面找不到任何东西 here or here。我唯一找到的是简洁的:
Clear the current X selection.
来自 Python shell 帮助(神秘的 X
、坐标是什么?)
那么怎么实现这么看似简单的呢?请帮忙,我一时不知所措。
好的。所以答案是:
ttk.Treeview.selection()
它未在 the great New Mexico Tech resource, but it does get mentioned in the best tutorial out there and (of course) is in the docs 中列出。不知何故,它仍然逃脱了我。
现在,有了一种测试所选内容的方法很容易:
if len(tree.selection()) > 0:
tree.selection_remove(tree.selection()[0])
怎么样:
for item in self.tree.selection():
self.tree.selection_remove(item)
z33k 给出的答案帮助我得到了我需要的东西。但是如果选择了多个项目,它只会取消选择第一个。要取消选择我使用的当前选择的所有项目
此逻辑与 est.tenorio 相同,只是解释了它的作用。
取消选择所有项目
for i in tree.selection():
tree.selection_remove(i)
如果你想一行完成。
tree.selection_remove(*tree.selection())
我在尝试从另一个小部件的回调中取消选择 Treeview
项目时遇到问题。我设法在 ESCAPE 上实现了一个有效的取消选择 press with:
tree.selection_remove(tree.focus())
在绑定到树视图对象本身的回调中。它仅在树视图具有焦点时才起作用(但没关系,这是一种期望的行为)。另一方面,尝试从另一个小部件的回调中进行相同的操作是行不通的。
我尝试使用:
tree.selection_clear()
如推荐的那样
重要:使用 tree.selection_add(iid)
从同一调用中选择树视图中的项目是有效的。与操纵另一个小部件(一个组合框,执行调用的小部件是一个框架)相同。基于此,我不认为问题是由于我的代码中的一些愚蠢的错误(拼写错误或类似的错误)引起的。
我的理论失焦是一个问题,因为这是我看到的唯一区别,当相同的代码与 ESCAPE 一起工作时,而不是其他地方,所以我试图获得焦点使用 tree.focus_set()
和 tree.focus_force()
,但这并没有改变任何东西。
我不太明白 selection_clear()
应该做什么。由于 ttk.Treeview
从 ttk.Misc
继承了此方法,因此相关文档很少。我在上面找不到任何东西 here or here。我唯一找到的是简洁的:
Clear the current X selection.
来自 Python shell 帮助(神秘的 X
、坐标是什么?)
那么怎么实现这么看似简单的呢?请帮忙,我一时不知所措。
好的。所以答案是:
ttk.Treeview.selection()
它未在 the great New Mexico Tech resource, but it does get mentioned in the best tutorial out there and (of course) is in the docs 中列出。不知何故,它仍然逃脱了我。
现在,有了一种测试所选内容的方法很容易:
if len(tree.selection()) > 0:
tree.selection_remove(tree.selection()[0])
怎么样:
for item in self.tree.selection():
self.tree.selection_remove(item)
z33k 给出的答案帮助我得到了我需要的东西。但是如果选择了多个项目,它只会取消选择第一个。要取消选择我使用的当前选择的所有项目
此逻辑与 est.tenorio 相同,只是解释了它的作用。
取消选择所有项目
for i in tree.selection():
tree.selection_remove(i)
如果你想一行完成。
tree.selection_remove(*tree.selection())