Виджет Scrollbar прокручивать содержимое контейнера, которое больше размеров этого контейнера.
Основные параметры конструктора Scrollbar:
orient: направление прокрутки. Может принать следующие значения: vertical (вертикальная прокрутка) и
horizontal (горизонтальная прокрутка).
command: команда прокрутки
Scrollbar не используется сам по себе, он применяется лишь для прокручиваемого виджета. Не все виджеты в tkinter являются прокручиваемыми. Для прокрутки по вертикали прокручиваемый виджет имеет yview, а для прокрутки по горизонтали - метод xview (виджет может иметь только один из этих методов). Примером прокручиваемого виджета может служить Listbox или Text. Этот метод используется в качестве команды для Scrollbar:
listbox = Listbox() # вертикальная прокрутка scrollbar = ttk.Scrollbar(orient="vertical", command = listbox.yview)
Но прокручиваемый виджет должен также взаимодействовать со Scrollbar. Для этого у прокручиваемого виджета имеются параметры yscrollcommand и/или xscrollcommand, которые должны принимать вызов метода set объекта Scrollbar:
from tkinter import *
from tkinter import ttk
languages = ["Python", "JavaScript", "C#", "Java", "C++", "Rust", "Kotlin", "Swift",
"PHP", "Visual Basic.NET", "F#", "Ruby", "R", "Go", "C",
"T-SQL", "PL-SQL", "Typescript", "Assembly", "Fortran"]
root = Tk()
root.title("METANIT.COM")
root.geometry("250x200")
languages_var = StringVar(value=languages)
listbox = Listbox(listvariable=languages_var)
listbox.pack(side=LEFT, fill=BOTH, expand=1)
scrollbar = ttk.Scrollbar(orient="vertical", command=listbox.yview)
scrollbar.pack(side=RIGHT, fill=Y)
listbox["yscrollcommand"]=scrollbar.set
root.mainloop()
В конструкторе scrollbar ассоциируется с функцией, которую надо выполнять при прокрутке. В данном случае это метод yview элемента listbox. В итоге мы сможем прокручивать элементы по вертикали:
И так как необходимо прокручивать listbox по вертикали, то у него задается
параметр listbox["yscrollcommand"]=scrollbar.set
В принципе для прокрутки виджета (который поддерживает прокрутку) использовать Scrollbar необязательно. Для прокрутки виджет может содержать специальные методы:
yview_scroll(number, what): сдвигает текущее положение по вертикали. Параметр number указывает количество, на которое надо сдвигать. А параметр
what определяет единицы сдвига и может принимать следующие значения: "units" (элемент) и "pages" (страницы)
xview_scroll(number, what): сдвигает текущее положение по горизонтали
yview_moveto(fraction): сдвигает область просмотра по вертикали на определенную часть, которая выражается во float от 0 до 1
xview_moveto(fraction): сдвигает область просмотра на определенную часть по горизонтали
Например, сдвиг на два элемента списка вниз:
from tkinter import *
from tkinter import ttk
languages = ["Python", "JavaScript", "C#", "Java", "C++", "Rust", "Kotlin", "Swift",
"PHP", "Visual Basic.NET", "F#", "Ruby", "R", "Go",
"T-SQL", "PL-SQL", "Typescript"]
root = Tk()
root.title("METANIT.COM")
root.geometry("250x200")
languages_var = StringVar(value=languages)
listbox = Listbox(listvariable=languages_var)
listbox.pack(expand=1, fill=BOTH)
# сдвигаем скрол на 1 элемент внизу
listbox.yview_scroll(number=1, what="units")
root.mainloop()