tkinter
Прокрутка виджета
Поиск…
Вступление
Полоски прокрутки могут быть добавлены в виджеты Listbox, Canvas и Text. Кроме того, виджеты ввода можно прокручивать по горизонтали. Чтобы иметь возможность прокручивать другие типы виджетов, вы должны поместить их в виджет Canvas или Text.
Синтаксис
- scrollbar = tk.Scrollbar (родительский, ** kwargs)
параметры
параметр | Описание |
---|---|
родитель | Виджеты tkinter существуют в иерархии. За исключением корневого окна, у всех виджетов есть родитель. Некоторые онлайн-уроки называют этот «мастер». Когда виджет будет добавлен на экран с пакетом, местом или сеткой, он появится внутри этого родительского виджета |
восток | Ориентация полосы прокрутки, "vertical" (значение по умолчанию) или "horizontal" |
замечания
В этих примерах предполагается, что tkinter был импортирован либо import tkinter as tk
(python 3), либо import Tkinter as tk
(python 2).
Подключение вертикальной полосы прокрутки к текстовому виджету
Соединение между виджетами и полосой прокрутки происходит в обоих направлениях. Полоса прокрутки должна быть развернута вертикально, чтобы она имела ту же высоту, что и виджет.
text = tk.Text(parent)
text.pack(side="left")
scroll_y = tk.Scrollbar(parent, orient="vertical", command=text.yview)
scroll_y.pack(side="left", expand=True, fill="y")
text.configure(yscrollcommand=scroll_y.set)
Прокрутка виджета Canvas горизонтально и вертикально
Принцип по существу тот же, что и для виджета «Текст», но макет Grid
используется для размещения полос прокрутки вокруг виджета.
canvas = tk.Canvas(parent, width=150, height=150)
canvas.create_oval(10, 10, 20, 20, fill="red")
canvas.create_oval(200, 200, 220, 220, fill="blue")
canvas.grid(row=0, column=0)
scroll_x = tk.Scrollbar(parent, orient="horizontal", command=canvas.xview)
scroll_x.grid(row=1, column=0, sticky="ew")
scroll_y = tk.Scrollbar(parent, orient="vertical", command=canvas.yview)
scroll_y.grid(row=0, column=1, sticky="ns")
canvas.configure(yscrollcommand=scroll_y.set, xscrollcommand=scroll_x.set)
В отличие от виджета «Текст» прокручиваемая область Canvas не обновляется автоматически при изменении ее содержимого, поэтому нам нужно определить ее и обновить вручную с scrollregion
аргумента scrollregion
:
canvas.configure(scrollregion=canvas.bbox("all"))
canvas.bbox("all")
возвращает координаты прямоугольника, соответствующие всему содержимому холста.
Прокрутка группы виджетов
Когда окно содержит много виджетов, они могут быть не все видимыми. Однако ни окно (экземпляр Tk, ни Toplevel), ни кадр не прокручиваются. Одним из решений, позволяющих прокручивать содержимое окна, является размещение всех виджетов в кадре, а затем встраивание этого кадра в холст с create_window
метода create_window
.
canvas = tk.Canvas(parent)
scroll_y = tk.Scrollbar(parent, orient="vertical", command=canvas.yview)
frame = tk.Frame(canvas)
# group of widgets
for i in range(20):
tk.Label(frame, text='label %i' % i).pack()
# put the frame in the canvas
canvas.create_window(0, 0, anchor='nw', window=frame)
# make sure everything is displayed before configuring the scrollregion
canvas.update_idletasks()
canvas.configure(scrollregion=canvas.bbox('all'),
yscrollcommand=scroll_y.set)
canvas.pack(fill='both', expand=True, side='left')
scroll_y.pack(fill='y', side='right')