【发布时间】:2018-07-13 13:36:08
【问题描述】:
我在尝试从另一个小部件的回调中取消选择 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 继承了此方法,因此有关此的文档很少。我在上面找不到任何东西 here 或 here。我发现的唯一东西是简洁的:
清除当前的 X 选择。
来自 Python shell 帮助(神秘的 X,坐标是什么?)
那么如何完成这么看似简单的事情呢?请帮忙,我不知所措。
【问题讨论】:
-
@Nae:那是不必要的。我问了一个笼统的问题,只举一个具体的例子来更好地说明它。 我不是要求调试我没有提供的代码。您要以这种方式“适度”执行的唯一行为将是人们故意从他们的问题中删除有用的细节。想想这是否真的是你所追求的。就我而言,我希望得到一个简单的答案,例如:是的,selection_clear() 是您取消选择 treeview items() 的方式 - 查看您的代码,有问题。这将是一个很大的帮助,我相信这里有很多好心人很乐意提供它。
-
当然,但是不提供示例代码有什么帮助呢?
-
非常简单。我不提供调试代码,因为我不希望任何人调试它。问题是如何取消选择 Treeview 项目。这就是你所能得到的一般性。
-
@o'rety,请不要误会我的意思,我什至理解您以这种方式提出问题的观点,但请考虑一下:您可以使用相同的标题并发布最少仅用于创建、选择和插入项目的代码。这样,没有人会觉得只是为您编写代码,并且您避免报告您的基本原理,这会迫使其他人进行需求分析,从而引入四层可能的错误:您的基本原理,您的代码(没有人看到),在你写的关于它的文字,最后在别人对你的话的分析中的某个地方。
标签: python tkinter treeview ttk