Scrollbar и прокрутка виджета

Последнее обновление: 15.09.2022

Виджет 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 и Listbox в tkinter и Python

Ручная прокрутка

В принципе для прокрутки виджета (который поддерживает прокрутку) использовать 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()
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850