【问题标题】:Python Tkinter Treeview (How link parent and child)Python Tkinter Treeview(如何链接父母和孩子)
【发布时间】:2021-03-31 07:08:32
【问题描述】:

你好,我想做这样的事情,你能建议一个允许我这样做的函数吗?谢谢

我在窗户上有什么:

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

【问题讨论】:

  • 你能告诉我们你用来显示树视图的代码sn-p吗?
  • 没关系,我已经添加了我的代码。 ;)
  • 没有人知道答案吗? x)

标签: python tkinter treeview


【解决方案1】:

我提供了一个小示例,您可以如何实现这一目标。使用item的可选参数iid进行识别,使用Treeview的parent(item)方法获取information

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

【讨论】:

  • 嗯,这并不能真正回答我的问题?,但它是其中的一部分。
  • 缺少什么?
  • 没关系,我设法用您的代码和另一个线程的 get_all_children 完成了我想要的,该线程在 stackoverflow 上谈论 Treeview。感谢你的宝贵时间。 ?
猜你喜欢
  • 2023-02-26
  • 1970-01-01
  • 1970-01-01
  • 2011-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-15
  • 1970-01-01
相关资源
最近更新 更多