0

我希望用户从 Tkinter 树的不同分支中选择多个节点。这样我就可以进行进一步的处理,我应该知道每个选择的父分支。

  • 当我只选择一个节点时,我可以使用下面的代码获取父 ID。
  • 当我选择多个节点(按 ctrl 键)时,我只得到第一个选择的父节点

如何同时完成所有选择的父节点?

这是我的工作代码:

import ttk
import Tkinter as tk

def select():
    item_iid = tree.selection()[0]
    parent_iid = tree.parent(item_iid)
    node = tree.item(parent_iid)['text']
    print node

root = tk.Tk()
tree = ttk.Treeview(root,show="tree")#, selectmode=EXTENDED)  
tree.config(columns=("col1"))

#SUb treeview
style = ttk.Style(root)
style.configure("Treeview")
tree.configure(style="Treeview")

tree.insert("", "0", "item1", text="Branch1",)
tree.insert("", "1", "item2", text="Branch2")

#sub tree using item attribute to achieve that
tree.insert("item1", "1", text="FRED")
tree.insert("item1", "1", text="MAVIS")
tree.insert("item1", "1", text="BRIGHT")

tree.insert("item2", "2", text="SOME")
tree.insert("item2", "2", text="NODES")
tree.insert("item2", "2", text="HERE")

tree.pack(fill=tk.BOTH, expand=True)
tree.bind("<Return>", lambda e: select()) 

root.mainloop()

电流输出:

在此处输入图像描述

仅选择一个节点时能够显示父名称

完成后仅显示第一个的多选父节点,期望每个选定节点的父节点名称。

Branch1 显示,即仅用于第一个选择:

在此处输入图像描述

4

1 回答 1

1

选择()

返回所选项目的元组

(来源)(强调我的)


.selection()返回在 中选择的所有项目的元组Treeview。在函数的第一行,您明确地只选择了第一项:

def select():
    item_iid = tree.selection()[0] #<---Right here you tell Python that you only want to use the first item from the tuple.
    parent_iid = tree.parent(item_iid)
    node = tree.item(parent_iid)['text']
    print node

对函数进行简单的更改以使其循环遍历元组的所有元素将解决此问题:

def select():
    for i in tree.selection():
        item_iid = i
        parent_iid = tree.parent(item_iid)
        node = tree.item(parent_iid)['text']
        print(node)
于 2019-10-17T13:25:26.260 回答