Select Tkinter 树视图中的多个条目无需按 ctrl 键

Select multiple entries in Tkinter treeview without pressing ctrl key

我正在尝试 select 来自 Tkinter 树视图的多个条目。我使用 selectmode = extended 相同(使用 ctrl+enter 键)。但是,一旦我尝试在树中打开新分支(按下 ctrl),我就无法打开,如果我不按 ctrl 就这样做,那么来自分支 1 的 selections 就会消失。

因此,我正在尝试通过其他方式 select 从 Tkinter 树(来自不同分支)中获取多个节点,而无需按 ctrl 键。 (即记住我的鼠标 selections 或某些复选框或任何其他建议)

代码:

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

预期: Select 来自不同分支的多个节点,无需按 ctrl 键

您需要做的第一件事是将 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)