Полоса прокрутки Treeview в Python-Tkinter
При работе с иерархическими данными в графических пользовательских интерфейсах (GUI) часто необходимо отображать данные в структурированном и организованном виде. Виджет Treeview в Python-Tkinter предоставляет мощное решение для удобного представления иерархических данных. Однако по мере роста количества элементов в Treeview становится крайне важно включить полосу прокрутки, чтобы обеспечить плавную навигацию и удобство использования.
Во-первых, убедитесь, что в вашей системе установлены Python и Tkinter. Python 3 рекомендуется для совместимости и улучшенных функций. Если у вас не установлен Tkinter, вы можете легко установить его с помощью pip, менеджера пакетов Python. Откройте терминал или командную строку и выполните следующую команду −
pip install tk
Установив Tkinter, вы получите доступ к мощному набору инструментов графического интерфейса, необходимому для создания виджета Treeview и добавления полосы прокрутки.
Создание древовидного представления
Для начала мы создадим базовый виджет Treeview. Откройте свой любимый текстовый редактор или интегрированную среду разработки (IDE) и создайте новый файл Python. Мы начнем с импорта необходимых модулей –
import tkinter as tk
from tkinter import ttk
Модуль tkinter обеспечивает основу для создания приложений с графическим интерфейсом на Python, а модуль ttk содержит тематические виджеты, включая виджет Treeview.
Далее давайте создадим корневое окно Tkinter и виджет Treeview. Добавьте следующий код в ваш файл Python —
root = tk.Tk()
# Create a Treeview widget
tree = ttk.Treeview(root)
tree.pack()
Здесь мы создаем корневое окно с помощью tk.Tk(), которое служит главным окном нашего приложения. Затем мы создаем объект дерева класса ttk.Treeview, который представляет наш виджет Treeview. Наконец, мы используем метод package для отображения виджета Treeview в корневом окне.
Добавление полосы прокрутки
Чтобы добавить полосу прокрутки в наше Treeview, мы воспользуемся виджетом ttk.Scrollbar, предоставленным Tkinter. Полоса прокрутки обеспечит плавную вертикальную прокрутку в дереве, если оно содержит больше элементов, чем может поместиться в доступном пространстве.
После создания виджета Treeview добавьте следующий код, чтобы создать полосу прокрутки, и настройте Treeview для ее использования −
# Create a Scrollbar
scrollbar = ttk.Scrollbar(root, orient="vertical", command=tree.yview)
# Configure the Treeview to use the scrollbar
tree.configure(yscrollcommand=scrollbar.set)
# Place the scrollbar on the right side of the Treeview
scrollbar.pack(side="right", fill="y")
Здесь мы создаем объект полосы прокрутки класса ttk.Scrollbar, указывая ориентацию как «вертикальную» с помощью параметра orient. Параметр команды имеет значение Tree.yview, которое связывает полосу прокрутки с вертикальной прокруткой Treeview.
Далее мы настраиваем Treeview на использование метода set полосы прокрутки в качестве параметра yscrollcommand. Это гарантирует, что полоса прокрутки контролирует вертикальную прокрутку Treeview.
Наконец, мы используем метод Pack, чтобы разместить полосу прокрутки в правой части виджета Treeview, заставляя ее заполнять всю высоту Treeview, используя опцию fill="y".
Благодаря этим дополнениям, если вы сейчас запустите файл Python, вы увидите виджет Treeview, сопровождаемый вертикальной полосой прокрутки с правой стороны. Полоса прокрутки позволит при необходимости прокручивать содержимое Treeview.
Заполнение древовидного представления
Теперь, когда у нас настроено Treeview и полоса прокрутки, давайте заполним Treeview некоторыми примерами данных. Это позволит нам наблюдать, как ведет себя полоса прокрутки при работе с большим количеством элементов.
Чтобы добавить столбцы и элементы в Treeview, измените файл Python следующим образом −
# Add columns to the Treeview
tree["columns"] = ("Name", "Age")
# Define column headings
tree.heading("#0", text="ID")
tree.heading("Name", text="Name")
tree.heading("Age", text="Age")
# Add items to the Treeview
tree.insert("", "end", text="1", values=("John Doe", "30"))
tree.insert("", "end", text="2", values=("Jane Smith", "25"))
tree.insert("", "end", text="3", values=("Mike Johnson", "35"))
Здесь мы добавляем два столбца в Treeview, устанавливая атрибут columns в виде кортежа с именами столбцов: «Имя» и «Возраст». Столбец #0 представляет собой первый столбец по умолчанию, который мы будем использовать для отображения идентификаторов. Мы используем метод заголовка, чтобы соответствующим образом установить заголовки столбцов.
Затем мы вставляем элементы в Treeview, используя метод вставки. Каждый элемент представлен уникальным идентификатором и имеет соответствующие значения для столбцов. В этом примере мы вставляем три элемента с идентификаторами 1, 2 и 3, а также их соответствующими именами и возрастом.
Стилизация полосы прокрутки
Хотя базовая функциональность полосы прокрутки важна, вы также можете настроить ее внешний вид в соответствии с общей темой вашего приложения. Tkinter предоставляет возможности для изменения стиля полосы прокрутки с помощью класса ttk.Style. Давайте рассмотрим, как можно стилизовать полосу прокрутки, чтобы добиться более целостного вида.
Для начала импортируйте модуль ttk и создайте экземпляр класса ttk.Style −
from tkinter import ttk
# Create a Style object
style = ttk.Style()
Далее мы можем настроить стиль полосы прокрутки. В этом примере мы изменим цвет фона, цвет маркера и толщину полосы прокрутки. Добавьте следующий код после создания объекта стиля −
# Configure the style for the scrollbar
style.configure("Treeview.Scrollbar",
background="gray",
troughcolor="light gray",
gripcount=0,
gripcolor="white",
gripinset=2,
gripborderwidth=0,
thickness=10)
Здесь мы используем метод configure класса ttk.Style для настройки внешнего вида полосы прокрутки. Строка «Treeview.Scrollbar» относится к конкретному элементу стиля, который мы хотим изменить.
В этом примере мы установили серый цвет фона полосы прокрутки, светло-серый цвет впадины и белый цвет ручки. Для параметра «Gripcount» установлено значение 0, чтобы скрыть захват, и мы настраиваем внешний вид захвата с помощью параметров «Gripinset» и «Gripborderwidth». Наконец, мы установили толщину полосы прокрутки на 10 пикселей.
Чтобы применить индивидуальный стиль к полосе прокрутки, свяжите ее с виджетом Treeview. Измените код создания полосы прокрутки следующим образом −
# Create a Scrollbar with the customized style
scrollbar = ttk.Scrollbar(root, orient="vertical", command=tree.yview, style="Treeview.Scrollbar")
Если указать параметр стиля «Treeview.Scrollbar», полоса прокрутки будет использовать настроенный стиль, определенный ранее.
Сохраните файл Python и запустите его. Теперь вы должны увидеть полосу прокрутки с обновленным стилем в Treeview.
Тестирование полосы прокрутки
Сохраните файл Python и запустите его. Вы должны увидеть окно с виджетом Treeview и вертикальной полосой прокрутки справа. Попробуйте изменить размер окна или добавить больше элементов в Treeview, чтобы увидеть полосу прокрутки в действии.
Заключение
Здесь мы рассмотрели, как добавить полосу прокрутки в виджет Treeview в Python-Tkinter. Мы начали с создания базового Treeview, а затем добавили вертикальную полосу прокрутки, чтобы обеспечить плавную прокрутку содержимого Treeview. Мы также рассказали, как оформить полосу прокрутки в соответствии с общей темой вашего приложения. Кроме того, мы научились обрабатывать события полосы прокрутки, что позволяет нам выполнять определенный код в ответ на действия пользователя. Выполнив эти шаги, вы сможете улучшить свои приложения Python-Tkinter, включив прокручиваемые древовидные представления, обеспечивая эффективный и удобный способ навигации по иерархическим данным.