在Tkinter树视图中选择多个条目,而无需按Ctrl键

时间:2019-10-18 08:21:40

标签: python-3.x python-2.7 tkinter treeview ttk

我正在尝试从Tkinter树视图中选择多个条目。我使用 selectmode =扩展相同(使用Ctrl + Enter键)。但是,一旦尝试在树中打开新分支(按ctrl键),我将无法打开,如果不按ctrl进行同样的操作,我从分支1中的选择就会消失。

因此,我正在尝试找到其他方法来从Tkinter树中选择多个节点(来自不同的分支),而无需按ctrl键。 (即记住我的鼠标选择或一些复选框或任何其他建议)

  • 这是一个工作代码示例,该示例可使用ctrl键在不同分支中进行多重选择,但我需要在不按ctrl的情况下选择不同分支中的节点的多重选择,因为使用此方法我无法在选择第一个分支后打开新分支,如果释放的节点打开但选择消失了。

代码:

import ttk
import Tkinter as tk

def select():
    for i in tree.selection():
        item_iid = i
        print "".join([str(tree.item(i)['text'])])# for i in curItems])


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

预期:无需按Ctrl键即可从不同分支中选择多个节点

1 个答案:

答案 0 :(得分:0)

您需要做的第一件事是将selectmode设置为None:

tree = ttk.Treeview(root,show="tree", selectmode="none")

从这里开始,您可以自己处理选择事件。

现在修改您的select函数以对焦点更改作出反应:

def select(event=None):
    tree.selection_toggle(tree.focus())
    print tree.selection()

最后,使用鼠标单击作为示例,将其绑定到您喜欢的键上:

tree.bind("<ButtonRelease-1>", select)