Поиск по сайту:

Полоса прокрутки 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, включив прокручиваемые древовидные представления, обеспечивая эффективный и удобный способ навигации по иерархическим данным.

Статьи по данной тематике: