当前位置: 首页 > 知识库问答 >
问题:

复制Tkinter树视图

唐元青
2023-03-14

我正尝试在另一个窗口中显示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)

共有1个答案

骆文华
2023-03-14

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

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()
 类似资料:
  • 树视图以分层视图显示文档。导航栏可让你快速地切换、插入或删除文档。 添加一个文档 在导航栏点击 或按 CTRL+N 来得到一个空白显示的文档。 输入所需的数据。 在导航栏点击 来保存文档。 【注意】如果你的集合是空的,你需要点击 来添加新字段。 编辑一个文档 前往你想编辑的文档。 点击要修改的字段名、值或类型。 在导航栏点击 来应用更改。 添加一个字段或一个项目 前往你想编辑的文档。 点击 来添加

  • 树视图以分层视图显示文档。导航栏可让你快速地切换、插入或删除文档。 添加一个文档 在导航栏点击 或按 COMMAND-+ 来得到一个空白显示的文档。 输入所需的数据。 在导航栏点击 来保存文档。 【注意】如果你的集合是空的,你需要点击 来添加新字段。 编辑一个文档 前往你想编辑的文档。 点击要修改的字段名、值或类型。 在导航栏点击 来应用更改。 添加一个字段或一个项目 前往你想编辑的文档。 点击

  • 树视图以分层视图显示文档。导航栏可让你快速地切换、插入或删除文档。 添加一个文档 在导航栏点击 或按 CTRL+N 来得到一个空白显示的文档。 输入所需的数据。 在导航栏点击 来保存文档。 【注意】如果你的集合是空的,你需要点击 来添加新字段。 编辑一个文档 前往你想编辑的文档。 点击要修改的字段名、值或类型。 在导航栏点击 来应用更改。 添加一个字段或一个项目 前往你想编辑的文档。 点击 来添加

  • 我有两个从服务器端源并排填充的treeview。 左边的treeview包含分组的权限。右边的treeview包含人。 我已经在drop事件中设置了规则,以防止用户将权限以外的任何内容拖动到除个人以外的任何内容: 到目前为止还好。不过,我确实希望能够将相同的权限拖动到多个人。剑道树视图在拖放操作上做一个“移动节点”。 如何防止源树上拖动的节点被移动?

  • 我在我的应用程序中使用MVVM模式。我有以下(简化版)VM类: 因此,一个Module2601_VM包含几个属性,以及Module2610_VM和ComPort_VM对象的列表。 我有一个MainModule_VM类中Module2601_VM对象的列表。 我想将这个Module2601集合及其子项绑定到树状视图中,并使用以下层次结构: 网关: 网关#0 COM#1 我的问题是,我的层次结构正常,

  • 问题内容: 我一直在尝试为tkinter treeview附加水平和垂直滚动条。在我的主要应用程序中,所有数据均来自sql数据库,因此我需要能够在一个适当的窗口中滚动浏览大量数据。我已经设法将Treeview放置在子窗口中,但是我仍然对如何附加有效的滚动条感到困惑。 尽管目前有一个垂直滚动条,但它似乎没有附加到树形视图上,也不会滚动浏览我输入的任何数据。 有没有一种方法可以在应用程序中放置垂直和水