Шаг 61.
Библиотека Tkinter. Компоненты и вспомогательные классы. Нестилизуемые компоненты. Компонент PanedWindow. панель с разделителями (окончание)
На этом шаге мы рассмотрим методы этого компонента и приведем пример его использования.
Вот набор методов, поддерживаемых этим компонентом:
- add (<Помещаемый компонент> [, <Опции помещаемого компонента>]) - помещает компонент, указанный в первом параметре, в панель, указывая для нее записанные последующими параметрами опции.
Вот список поддерживаемых опций:
- width - задает ширину помещаемого в панель компонента в виде дистанции;
- height - задает высоту помещаемого в панель компонента в виде дистанции;
- minsize - задает минимальную ширину помещаемого компонента для панели с горизонтальной ориентации или его минимальную высоту для панели с вертикальной ориентацией;
- sticky - управляет выравниванием компонента в пространстве панели, отведенном под его размещение. Значение параметра должно представлять собой строку, содержащую следующие символы:
- "w" - левая сторона. компонента прижимается к левой стороне пространства панели;
- "n" - верхняя сторона компонента прижимается к верхней стороне пространства панели;
- "е" - правая сторона компонента прижимается к правой стороне пространства панели;
- "s" - нижняя сторона компонента прижимается к нижней стороне пространства панели.
Эти символы для удобства читаемости могут быть разделены запятыми и пробелами.
Если в качестве значения параметра указана пустая строка, компонент будет расположен в середине выделенного под него пространства панели.
Параметр sticky имеет смысл указывать только в том случае, если размеры компонента меньше размеров выделенного под него пространства;
- padx - задает величину дополнительных просветов слева и справа от компонента;
- pady - задает величину дополнительных просветов сверху и снизу от компонента;
- after - указывает компонент, после которого должен располагаться текущий;
- before - указывает компонент, перед которым должен располагаться текущий;
- panecget (<Компонент>, <Название опции компонента>) - возвращает значение опции с заданным названием, указанной для заданного компонента;
- paneconfig (<Компонент>, <Опции компонента>) - задает опции для указанного компонента;
- forget (<Компонент>) и remove (<Компонент>) - удаляют заданный компонент из панели;
- sash_coords (<Номер разделителя>) - возвращает кортеж из горизонтальной и вертикальной координат разделителя с заданным номером. Нумерация разделителей начинается с 0.
В возвращаемом кортеже оба значения представляют собой целые числа, указанные в пикселях относительно самой панели. Для панели с горизонтальной ориентацией имеет смысл только первое значение
(горизонтальная координата), а для панели с вертикальной ориентацией - второе значение (вертикальная координата);
- sash_place (<Номер разделителя>, <Горизонтальная координата>, <Вертикальная координата>) - задает новое местоположение разделителя с указанным номером.
Нумерация разделителей начинается с 0. Обе координаты указываются в виде целых чисел в пикселях и должны отсчитываться относительно самой панели. Для панели с горизонтальной ориентацией имеет
смысл только первый параметр (горизонтальная координата), а для панели с вертикальной ориентацией - второй параметр (вертикальная координата);
- panes () - возвращает список компонентов, находящихся в панели, в порядке слева направо (если для опции orient панели задано значение tkinter.HORIZONTAL) или сверху вниз (для значения tkinter.VERTICAL);
- identify (<Горизонтальная координата>, <Вертикальная координата>) - принимает горизонтальную и вертикальную координаты точки, заданные в виде целых чисел в пикселях относительно самой панели, и возвращает:
- кортеж из порядкового номера разделителя и строки "sash" - если точка с указанными координатами пришлась на разделитель. Нумерация разделителей начинается с 0;
- кортеж из порядкового номера захвата и строки "handle" - если точка с указанными координатами пришлась на захват. Нумерация захватов начинается с 0;
- пустую строку - если точка с указанными координатами пришлась на вложенный компонент.
Далее приведен пример размещения в панели с разделителями PanedWindow двух обычных панелей Frame (рисунок 1). Для наглядности опции второй вставляемой панели Frame указываются с применением метода paneconfig():
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("Пример использования PanedWindow")
def create_widgets(self):
pwd = tkinter.PanedWindow(self, width=600, height=200, showhandle=True,
sashwidth=10, sashrelief=tkinter.RIDGE, handlesize=30)
pwd.pack()
frame1 = tkinter.ttk.Frame(pwd)
pwd.add(frame1, width=300, sticky="wnes")
frame2 = tkinter.ttk.Frame(pwd)
pwd.add(frame2)
pwd.paneconfig(frame2, sticky="wnes")
root = tkinter.Tk()
app = Application(master=root)
root.mainloop()
Архив с файлом можно взять
здесь.
![](images/ris61_1.jpg)
Рис.1. Компонент PanedWindow, содержащий две панели
В составе стилизуемых компонентов также имеется компонент PanedWindow. Он полностью аналогичен рассмотренному нами, но беднее в плане функциональности и не очень удобен в использовании.
Со следующего шага мы начнем рассматривать виджет Menu.
Предыдущий шаг
Содержание
Следующий шаг