You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在tkinter的treeview控件中合并两个节点

问题解答:tkinter Treeview合并节点

tkinter的ttk.Treeview没有内置的节点合并方法,需要自行实现逻辑,核心就是你提到的「子节点转移+空父节点删除」的思路。

实现步骤

  • 先获取被合并父节点下的所有子节点iid
  • 遍历所有子节点,取出每个子节点的全部配置参数(文本、图标、值、标签等)
  • 在目标父节点下插入配置完全相同的新子节点
  • 所有子节点转移完成后,删除已经没有子节点的原父节点

注意:不要边遍历子节点边删除,建议先把所有子节点iid存入独立列表再遍历操作,避免删除节点导致的索引错位问题。

完整可运行示例

import tkinter as tk
from tkinter import ttk

def merge_parent(tree: ttk.Treeview, target_parent_iid, merged_parent_iid):
    # 先拿到被合并父节点的所有子节点iid,存成列表避免遍历过程中节点变化导致异常
    children = list(tree.get_children(merged_parent_iid))
    for child_iid in children:
        # 获取子节点全部配置
        child_opts = tree.item(child_iid)
        # 过滤出插入节点需要的参数
        insert_opts = {k:v for k,v in child_opts.items() if k in ('text', 'image', 'values', 'tags', 'open')}
        # 插入到目标父节点末尾
        tree.insert(target_parent_iid, tk.END, **insert_opts)
        # 删除原节点
        tree.delete(child_iid)
    # 最后删除空的被合并父节点
    tree.delete(merged_parent_iid)

# 基础界面代码
root = tk.Tk()

tree = ttk.Treeview(
    root,
    selectmode='browse'
)
tree.insert('', 0, iid=1, text='Parent1')
tree.insert('', 0, iid=2, text='Parent2')

tree.insert(1, 0, text='Child 1')
tree.insert(2, 0, text='Child 2')

tree.pack(pady=10)

# 合并测试按钮,点击后将Parent2合并到Parent1
merge_btn = ttk.Button(root, text='合并Parent2到Parent1', command=lambda: merge_parent(tree, 1, 2))
merge_btn.pack(pady=5)

root.mainloop()

运行代码后点击合并按钮,即可得到你需要的节点结构,Parent2会被删除,它的子节点Child2会完整转移到Parent1下。

内容的提问来源于stack exchange,提问作者Jan Willem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 05:24:05