Python tkinter treeview selection
Для работы с выделенными строками в Treeview определен ряд методов:
- selection() : возвращает идентификаторы выделенных строк в виде кортежа
- selection_add(items) : выделяет строки с идентификаторами, которые передаются в качестве параметра
- selection_remove(items) : снимает выделение строк с идентификаторами, которые передаются в качестве параметра
- selection_set(items) : снимает выделение с ранее выделенных строк и выделяет строки с идентификаторами, которые передаются в качестве параметра
Обработка события выделения
Для обработки выделения строк у Treeview применяется событие >
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"\n" label["text"]=selected_people tree.bind(">", item_selected) root.mainloop()
Здесь с помощью метода bind() устанавливаем для события > функцию-обработчик item_selected. В этой функции получаем все идентификаторы выделенных строк с помощью метода tree.selection()
for selected_item in tree.selection()
Используя полученный идентификатор, получаем выделенный элемент с помощью метода tree.item
item = tree.item(selected_item)
Для получения самих значений обращаемся к атрибуту values :
Склеиваем их в строку selected_people и отображаем ее в метке label.
Режим выделения
По умолчанию в Treeview можно выделить только один элемент (одну строку). За установку режима выделения в Treeview отвечает параметр selectionmode , который может принимать следующие значения:
- extended : позволяет выбрать несколько строк
- browse : позволяет выбрать только одну строку
- none : выделение строк не доступно
Например, изменим код Treeview, установив режим «extended»:
tree = ttk.Treeview(columns=columns, show="headings", selectmode="extended")
И теперь можно выделять несколько строк: