【问题标题】:How to deselect an item (or items) of a Tkinter ttk.Treeview?如何取消选择 Tkinter ttk.Treeview 的项目(或项目)?
【发布时间】: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.Treeviewttk.Misc 继承了此方法,因此有关此的文档很少。我在上面找不到任何东西 herehere。我发现的唯一东西是简洁的:

清除当前的 X 选择。

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

那么如何完成这么看似简单的事情呢?请帮忙,我不知所措。

【问题讨论】:

  • @Nae:那是不必要的。我问了一个笼统的问题,只举一个具体的例子来更好地说明它。 我不是要求调试我没有提供的代码。您要以这种方式“适度”执行的唯一行为将是人们故意从他们的问题中删除有用的细节。想想这是否真的是你所追求的。就我而言,我希望得到一个简单的答案,例如:是的,selection_clear() 是您取消选择 treeview items() 的方式 - 查看您的代码,有问题。这将是一个很大的帮助,我相信这里有很多好心人很乐意提供它。
  • 当然,但是提供示例代码有什么帮助呢?
  • 非常简单。我不提供调试代码,因为我不希望任何人调试它。问题是如何取消选择 Treeview 项目。这就是你所能得到的一般性。
  • @o'rety,请不要误会我的意思,我什至理解您以这种方式提出问题的观点,但请考虑一下:您可以使用相同的标题并发布最少仅用于创建、选择和插入项目的代码。这样,没有人会觉得只是为您编写代码,并且您避免报告您的基本原理,这会迫使其他人进行需求分析,从而引入四层可能的错误:您的基本原理,您的代码(没有人看到),在你写的关于它的文字,最后在别人对你的话的分析中的某个地方。

标签: python tkinter treeview ttk


【解决方案1】:

怎么样:

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

【讨论】:

    【解决方案2】:

    好的。所以答案是:

    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])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-22
      • 2023-04-06
      • 2021-10-29
      • 1970-01-01
      • 2021-11-13
      • 1970-01-01
      • 2015-10-19
      • 1970-01-01
      相关资源
      最近更新 更多