Выберите несколько записей в Tkinter TreeView без нажатия клавиши Ctrl - PullRequest
0 голосов
/ 18 октября 2019

Я пытаюсь выбрать несколько записей из дерева Tkinter. Я использовал selectmode = extended для того же (используйте 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 голосов
/ 18 октября 2019

Первое, что вам нужно сделать, это установить для selectmode значение Нет:

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