Для работы с выделенными строками в Treeview определен ряд методов:
selection()
: возвращает идентификаторы выделенных строк в виде кортежа
selection_add(items)
: выделяет строки с идентификаторами, которые передаются в качестве параметра
selection_remove(items)
: снимает выделение строк с идентификаторами, которые передаются в качестве параметра
selection_set(items)
: снимает выделение с ранее выделенных строк и выделяет строки с идентификаторами, которые передаются в качестве параметра
Для обработки выделения строк у Treeview применяется событие <<TreeviewSelect>>
from tkinter import * from tkinter import ttk root = Tk() root.title("METANIT.COM") root.geometry("250x200") # определяем данные для отображения people = [("Tom", 38, "tom@email.com"), ("Bob", 42, "bob@email.com"), ("Sam", 28, "sam@email.com")] label = ttk.Label() label.pack(anchor=N, fill=X) # определяем столбцы columns = ("name", "age", "email") tree = ttk.Treeview(columns=columns, show="headings") tree.pack(expand=1, fill=BOTH) # определяем заголовки tree.heading("name", text="Имя", anchor=W) tree.heading("age", text="Возраст", anchor=W) tree.heading("email", text="Email", anchor=W) tree.column("#1", stretch=NO, width=70) tree.column("#2", stretch=NO, width=60) tree.column("#3", stretch=NO, width=100) # добавляем данные for person in people: tree.insert("", END, values=person) def item_selected(event): selected_people = "" for selected_item in tree.selection(): item = tree.item(selected_item) person = item["values"] selected_people = f"{selected_people}{person}\n" label["text"]=selected_people tree.bind("<<TreeviewSelect>>", item_selected) root.mainloop()
Здесь с помощью метода bind()
устанавливаем для события <<TreeviewSelect>>
функцию-обработчик item_selected.
В этой функции получаем все идентификаторы выделенных строк с помощью метода tree.selection()
for selected_item in tree.selection()
Используя полученный идентификатор, получаем выделенный элемент с помощью метода tree.item
item = tree.item(selected_item)
Для получения самих значений обращаемся к атрибуту values
:
person = item["values"]
Склеиваем их в строку selected_people и отображаем ее в метке label.
По умолчанию в Treeview можно выделить только один элемент (одну строку). За установку режима выделения в Treeview отвечает параметр selectionmode, который может принимать следующие значения:
extended
: позволяет выбрать несколько строк
browse
: позволяет выбрать только одну строку
none
: выделение строк не доступно
Например, изменим код Treeview, установив режим "extended":
tree = ttk.Treeview(columns=columns, show="headings", selectmode="extended")
И теперь можно выделять несколько строк: