Шаг 49.
Библиотека Tkinter. Компоненты и вспомогательные классы. Стилизуемые компоненты. Реализация прокрутки в компоненте Treeview. Компонент Scrollbar
На этом шаге мы рассмотрим организацию прокрутки с помощью компонента Scrollbar.
Ни один из компонентов библиотеки Tkinter (за исключением лишь Combobox) не обеспечивает возможность прокрутки своего содержимого самостоятельно. Если содержимое компонента
выходит за его границы, полосы прокрутки не появятся в компоненте автоматически. Нам придется самим позаботиться об их создании и соответствующей привязке к компоненту.
Прежде всего поговорим о самом компоненте полосы прокрутки, который представляется классом Scrollbar. Набор поддерживаемых им опций очень невелик:
- orient - задает ориентацию полосы прокрутки. Поддерживаются значения
- tkinter. HORIZONTAL - горизонтальная и
- tkinter.VERTICAL - вертикальная (поведение по умолчанию);
- command - задает функцию (метод), которая будет выполнена после изменения положения полосы прокрутки.
Следующие опции конфигурируются только через стили:
- background - цвет фона;
- highlightcolor - цвет выделения, обозначающего, что компонент имеет фокус ввода;
- highlightthickness - толщина рамки выделения, обозначающего, что компонент имеет фокус ввода;
- arrowsize - размер кнопок со стрелками по концам полосы прокрутки, а также ее толщина;
- troughcolor - цвет полосы прокрутки.
Нам следует создать и соответствующим образом разместить в контейнере две полосы прокрутки: горизонтальную - точно под компонентом, чье содержимое предстоит прокручивать, вертикальную -
точно правее этого компонента. После чего мы зададим в качестве значений их опций command следующие методы, поддерживаемые компонентом Treeview:
- xview () - реализует прокрутку по горизонтали и, соответственно, присваивается опции command горизонтальной полосы прокрутки;
- yview () - реализует прокрутку по вертикали, вследствие чего присваивается опции command вертикальной полосы прокрутки.
Далее приведен пример программы, создающей полосы прокрутки для компонента 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-приложений, здесь не приводятся ни полное описание этого компонента, ни необходимые инструкции.
Со следующего шага мы начнем более подробно знакомиться с настройкой внешнего вида стилизуемых компонентов.
Предыдущий шаг
Содержание
Следующий шаг