Tkinter treeview双击插入子节点始终显示在最后父节点下方问题求解
Tkinter Treeview子节点挂靠位置错误修复方案
问题原因
你代码的核心问题是双击回调中错误使用了全局累加的count变量作为父节点ID:
你在插入父节点的for循环中持续修改全局count的值,所有父节点插入完成后,count最终等于最后一个父节点的iid。后续你双击任意父节点插入子节点时,直接把这个count作为父节点参数传入,因此所有子节点都会被挂靠到最后一个父节点下,和插入索引的设置无关。
修复方法
- 首先在双击回调函数中获取当前实际选中的父节点iid,不要使用全局
count
在Double_click函数开头添加如下代码获取选中项:
# 单选场景下直接取第一个选中项的iid selected_parent = trv.selection()[0]
如果要兼容未选中、多选的异常场景,可增加非空判断:
selected_list = trv.selection() if not selected_list: return selected_parent = selected_list[0]
- 修改子节点插入代码,把parent参数替换为获取到的选中父节点iid
原有错误代码:
trv.insert(count, index='end', values=[seuid1, series_desc])
修改后代码:
trv.insert(parent=selected_parent, index='end', values=[seuid1, series_desc])
问题复现示例截图

内容的提问来源于stack exchange,提问作者Sun B
相关产品推荐
相关产品推荐

