На этом шаге мы рассмотрим организацию прокрутки с помощью компонента 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 с полосами прокрутки
Со следующего шага мы начнем более подробно знакомиться с настройкой внешнего вида стилизуемых компонентов.