在Python3.7中,我需要在打开节点时展开所有子节点。让我们使用以下示例:
A
--A.1
----A.1.1
--A.2
----A.2.1
----A.2.2
B
--B.1
----B.1.1
--B.2
在本例中,当在GUI中展开时,也应展开A的所有子节点
根据官方的treeview documentation,您可以绑定事件“<;>;”,该事件是在所选节点展开之前立即生成的。知道这一点,我可以将事件绑定为:
tree.bind('<<TreeviewOpen>>', handleOpenEvent)
现在我可以使用this solution中的策略编写一个方法来处理事件,如下所示:
def handleOpenEvent(event):
tree.item(tree.focus(), open=True) # Tried with and without
for child in tree.get_children(tree.focus()):
tree.item(child, open=True)
无论我尝试什么,这段代码都不会展开所选节点上的所有子节点。我已经尝试过这样做:扩展A将扩展所有B节点,这确实有效,但当扩展A时,我无法扩展所有A节点。看来Treeview正在做一些我不知道的额外的底层事情。有什么想法吗
您离解决方案不远,缺少的是您需要递归地打开
handleOpenEvent()
中的子对象的子对象。我建议编写一个单独的函数open_children(parent)
,递归地打开项目:然后在
handleOpenEvent()
中使用它:以下是完整的代码:
相关问题 更多 >
编程相关推荐