【问题标题】:Duplicating a Tkinter treeview复制 Tkinter 树视图
【发布时间】:2020-12-06 13:12:43
【问题描述】:

我正在尝试在另一个窗口中显示 ttk 树视图。似乎唯一的选择是遍历原始树视图并相应地填充新的。

但是我似乎无法将所有(许多)子文件夹放在正确的位置,从 2d 级别开始,一切都混在一起了(即,我得到了根文件夹及其子文件夹,然后子文件夹似乎插入随机位置)。

函数是:

    def getsubchildren(item=''):
        children = []
        for child in original_treeview.get_children(item):
            i = new_treeview.insert(item, 'end', text=original_treeview.item(child) 
                                   ['text'],values=original_treeview.item(child)['values'])
            children.append(i)

        for subchild in children: 
            getsubchildren(subchild)

并使用getsubchildren(item='') 调用函数,从第一级开始迭代。 一定是我做错了什么,但我无法确定问题所在,而且我修改函数的尝试只会产生较差的结果。 有什么想法吗?

谢谢,

【问题讨论】:

  • 你为什么要这样做?
  • 我为什么不呢? :) 实际上,它最初是作为一个选项来选择用于移动或复制文件或文件夹的目标文件夹。从人体工程学的角度来看,这听起来比在主树视图上选择要好。由于我无法成功,而且我显然是顽固的类型,所以我来了。本质上,我确实有另一种选择,但我想有一个解决方案来实现这一点。

标签: python-3.x tkinter treeview


【解决方案1】:

在不知道项目深度的情况下,您需要检查项目是否有子项。如果是这样,您需要该函数在循环中调用自身。这是一个工作示例:

import tkinter as tk
from tkinter import ttk

root = tk.Tk()

maintree = ttk.Treeview(root)
maintree.pack()

first = maintree.insert("","end",text='first')
second= maintree.insert(first,"end",text='second')
third= maintree.insert(second,"end",text='third')
fourth= maintree.insert(third,"end",text='fourth')

st = maintree.insert("","end",text='1st')
nd= maintree.insert(st,"end",text='2nd')
rd= maintree.insert(nd,"end",text='3rd')
th= maintree.insert(rd,"end",text='4th')

top = tk.Toplevel(root)
subtree = ttk.Treeview(top)
subtree.pack()

def copy_item_tree(item,child):
    for child in maintree.get_children(child):
        item = subtree.insert(item,"end",
                              text=maintree.item(child)['text'])
        if maintree.get_children(child):
            copy_item_tree(item,child)
def copy_tree():
    for child in maintree.get_children():
        item = subtree.insert("","end",text=maintree.item(child)['text'])
        copy_item_tree(item,child)

button = tk.Button(root,text='Copy Tree', command=copy_tree)
button.pack(fill='x')
root.mainloop()

【讨论】:

  • 谢谢 - 但是我不确定如果每个孩子有多个孩子,这会起作用吗?明天我会尝试并提供反馈。
  • 它有效,而且完美无缺。非常感谢您的帮助。我将您的答案标记为解决方案。
猜你喜欢
  • 1970-01-01
  • 2017-02-06
  • 2020-11-21
  • 2021-03-29
  • 2020-04-11
  • 1970-01-01
  • 1970-01-01
  • 2018-04-05
  • 1970-01-01
相关资源
最近更新 更多