首页 > 解决方案 > Python Tkinter Treeview(如何链接父母和孩子)

问题描述

您好,我想做类似的事情,您能建议一个允许我这样做的功能吗?谢谢

我在窗户上的东西:

- GrandParents
    - Parents
        Child1
        Child2
    - Parents2
        Child3
- GrandParents2
    Children

...

我想在控制台中得到什么:

GrandParents_Parents_Child1
GrandParents_Parents_Child2
GrandParents_Parents2_Child3
GrandParents2_Children
...

我的代码:

import tkinter as tk
from tkinter import ttk

root = tk.Tk()
root.title("Treeview")
entry = tk.Entry(root)
tv = ttk.Treeview()
menu = tk.Menu(root, tearoff = False)

def add():
    if not tv.exists(entry.get()) and entry.get() != "":
        if tv.selection() == ():
            tv.insert('', 'end', entry.get(), text=entry.get())
        else:
            tv.insert(tv.selection()[0], 'end', entry.get(), text=entry.get())

def popup(event):
    menu.tk_popup(event.x_root, event.y_root)

def unselect(event):
    if len(tv.selection()) > 0:
        tv.selection_remove(tv.selection()[0])

menu.add_command(label="Add", command=add)
tv.bind("<Button-3>", popup)
tv.bind("<Button-1>", unselect)

tv.pack()
entry.pack()
root.mainloop()

标签: pythontkintertreeview

解决方案


我提供了一个小例子,你可以如何实现这一点。使用 item 的可选参数iid来识别它,并使用 Treeview 的parent(item)方法获取信息

import tkinter as tk
from tkinter import ttk

root = tk.Tk()
root.title("Treeview")
entry = tk.Entry(root)
tv = ttk.Treeview()
#list of all parents of the selected item
parents = []
def get_parent(item):
    parent = tv.parent(item)
    parents.append(parent) #add parent to list
    if tv.parent(parent): #if parent has a parent
        get_parent(parent)
def get_tree(event):
    selected = tv.selection()
    if tv.parent(selected):
        get_parent(selected)
    print(f'the parantes of {selected} are {parents}')
    parents.clear()#clear list after printing
##insert some items and use the optional parameter idd i.e. Grandparent
tv.insert('', 'end', 'Grandparent', text='Grandparent')
tv.insert('Grandparent', 'end', 'Parent', text='Parent')
tv.insert('Parent', 'end', 'Child', text='Child')
##bind treeview select event
tv.bind('<<TreeviewSelect>>', get_tree)
menu = tk.Menu(root, tearoff = False)

def add():
    if not tv.exists(entry.get()) and entry.get() != "":
        if tv.selection() == ():
            tv.insert('', 'end', entry.get(), text=entry.get())
        else:
            tv.insert(tv.selection()[0], 'end', entry.get(), text=entry.get())

def popup(event):
    menu.tk_popup(event.x_root, event.y_root)

def unselect(event):
    if len(tv.selection()) > 0:
        tv.selection_remove(tv.selection()[0])

menu.add_command(label="Add", command=add)
tv.bind("<Button-3>", popup)
tv.bind("<Button-1>", unselect)

tv.pack()
entry.pack()
root.mainloop()

推荐阅读