Шаг 49.
Библиотека Tkinter. Компоненты и вспомогательные классы. Стилизуемые компоненты. Реализация прокрутки в компоненте Treeview. Компонент Scrollbar

    На этом шаге мы рассмотрим организацию прокрутки с помощью компонента Scrollbar.

    Ни один из компонентов библиотеки Tkinter (за исключением лишь Combobox) не обеспечивает возможность прокрутки своего содержимого самостоятельно. Если содержимое компонента выходит за его границы, полосы прокрутки не появятся в компоненте автоматически. Нам придется самим позаботиться об их создании и соответствующей привязке к компоненту.

    Прежде всего поговорим о самом компоненте полосы прокрутки, который представляется классом Scrollbar. Набор поддерживаемых им опций очень невелик:

    Следующие опции конфигурируются только через стили:

    Нам следует создать и соответствующим образом разместить в контейнере две полосы прокрутки: горизонтальную - точно под компонентом, чье содержимое предстоит прокручивать, вертикальную - точно правее этого компонента. После чего мы зададим в качестве значений их опций command следующие методы, поддерживаемые компонентом Treeview:

    Далее приведен пример программы, создающей полосы прокрутки для компонента Treeview. Результат выполнения показан на рисунке 1.

import tkinter
import tkinter.ttk

class Application(tkinter.ttk.Frame):
    def __init__(self, master=None):
        super().__init__(master)
        # Обязательно указываем ширину и высоту контейнера посредством
        # опций width и height соответственно
        self.configure(width=200, height=100)
        self.pack(padx=4, pady=4)

        self.create_widgets()
        self.master.title("Пример использования Treeview")

    def create_widgets(self):
        trwPlatforms = tkinter.ttk.Treeview(self, columns=("Name", "Version"), 
             displaycolumns=(0, 1), show="headings")
        trwPlatforms.insert("", "end", None, values=("Python", "3.6.4"))
        trwPlatforms.insert("", "end", None, values=("PHP", "7.2.1"))
        trwPlatforms.insert("", "end", None, values=("Ruby", "2.5.0"))
        trwPlatforms.column("Version", width=50, stretch=False, anchor="center")
        trwPlatforms.heading("Name", text="Платформа")
        trwPlatforms.heading("Version", text="Версия", anchor="center")
        trwPlatforms.grid(row=0, column=0, sticky="wnes")
        hs = tkinter.ttk.Scrollbar(self, orient=tkinter.HORIZONTAL, 
             command=trwPlatforms.xview)
        hs.grid(row=1, column=0, sticky="we")
        vs = tkinter.ttk.Scrollbar(self, command=trwPlatforms.yview)
        vs.grid(row=0, column=1, sticky="ns")
        self.grid_rowconfigure(0, weight=1)
        self.grid_columnconfigure(0, weight=1)


root = tkinter.Tk()
app = Application(master=root)
root.mainloop()
Архив с файлом можно взять здесь.


Рис.2. Компонент Treeview с полосами прокрутки


   Примечание. Существует возможность реализовать горизонтальную прокрутку в поле ввода (Entry) посредством компонента Scrollbar, а также использовать Scrollbar независимо от каких-либо других компонентов. Однако, поскольку такие сценарии применения полосы прокрутки нехарактерны для Windows-приложений, здесь не приводятся ни полное описание этого компонента, ни необходимые инструкции.

    Со следующего шага мы начнем более подробно знакомиться с настройкой внешнего вида стилизуемых компонентов.




Предыдущий шаг Содержание Следующий шаг