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()

我提供了一个如何实现这一点的小示例。使用项目的可选参数iid来识别它,并使用Treeview的父(项目(方法来获取信息:

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()

最新更新