Библиотека Tkinter: Упаковщики.

Упаковщик (менеджер геометрии, менеджер расположения) это специальный механизм, который размещает (упаковывает) виджеты на окне. В Tkinter есть три упаковщика: pack, place, grid.

В одном виджете можно использовать только один тип упаковки, при смешивании разных типов упаковки программа, скорее всего, не будет работать.

pack()

Упаковщик pack() является самым интеллектуальным (и самым непредсказуемым). При использовании этого упаковщика с помощью свойства side нужно указать к какой стороне родительского виджета он должен примыкать.

Как правило этот упаковщик используют для размещения виджетов друг за другом (слева направо или сверху вниз). Пример:

from tkinter import *

root = Tk()
root.title("Упаковщики")
root.minsize(width=500, height=400)

button1 = Button(text="1")
button2 = Button(text="2")
button3 = Button(text="3")
button4 = Button(text="4")
button5 = Button(text="5")
button1.pack(side='left')
button2.pack(side='top')
button3.pack(side='left')
button4.pack(side='bottom')
button5.pack(side='right')
root.mainloop()

Будет выведено:


Библиотека Tkinter: Упаковщики.

Для создания сложной структуры с использованием этого упаковщика обычно используют Frame, вложенные друг в друга. При применении этого упаковщика можно указать следующие аргументы:

  • side (“left”/”right”/”top”/”bottom”) – к какой стороне должен примыкать размещаемый виджет;
  • fill (None/”x”/”y”/”both”) – необходимо ли расширять пространство предоставляемое виджету;
  • expand (True/False) – необходимо ли расширять сам виджет, чтобы он занял всё предоставляемое ему пространство;
  • in_ – явное указание в какой родительский виджет должен быть помещён.

Кроме основной функции у виджетов есть дополнительные методы для работы с упаковщиками:

  • pack_configure – синоним для pack;
  • pack_slaves (синоним slaves) – возвращает список всех дочерних упакованных виджетов;
  • pack_info – возвращает информацию о конфигурации упаковки;
  • pack_propagate (синоним propagate) (True/False) – включает/отключает распространении информации о геометрии дочерних виджетов. По умолчанию виджет изменяет свой размер в соответствии с размером своих потомков. Этот метод может отключить такое поведение (pack_propagate(False));
  • pack_forget (синоним forget) – удаляет виджет и всю информацию о его расположении из упаковщика.

grid()

Этот упаковщик представляет собой таблицу с ячейками, в которые помещаются виджеты. Аргументы упаковщика:

  • row – номер строки, в который помещаем виджет;
  • rowspan – сколько строк занимает виджет;
  • column – номер столбца, в который помещаем виджет;
  • columnspan – сколько столбцов занимает виджет;
  • padx/pady – размер внешней границы (бордюра) по горизонтали и вертикали;
  • ipadx/ipady – размер внутренней границы (бордюра) по горизонтали и вертикали. Разница между pad и ipad в том, что при указании pad расширяется свободное пространство, а при ipad расширяется помещаемый виджет;
  • sticky (“n”, “s”, “e”, “w” или их комбинация) – указывает к какой границе “приклеивать” виджет. Позволяет расширять виджет в указанном направлении. Границы названы в соответствии со сторонами света. “n” (север) – верхняя граница, “s” (юг) – нижняя, “w” (запад) – левая, “e” (восток) – правая;
  • in_ – явное указание в какой родительский виджет должен быть помещён.

Пример: текстовый виджет с двумя полосами прокрутки:

from tkinter import *

root=Tk()
text = Text(wrap=NONE)
vscrollbar = Scrollbar(orient='vert', command=text.yview)
text['yscrollcommand'] = vscrollbar.set
hscrollbar = Scrollbar(orient='hor', command=text.xview)
text['xscrollcommand'] = hscrollbar.set

# размещаем виджеты
text.grid(row=0, column=0, sticky='nsew')
vscrollbar.grid(row=0, column=1, sticky='ns')
hscrollbar.grid(row=1, column=0, sticky='ew')

# конфигурируем упаковщик, чтобы текстовый виджет расширялся
root.rowconfigure(0, weight=1)
root.columnconfigure(0, weight=1)
root.mainloop()

Будет выведено:


Библиотека Tkinter: Упаковщики.

place()

place представляет собой простой упаковщик, позволяющий размещать виджет в фиксированном месте с фиксированным размером.

Также он позволяет указывать координаты размещения в относительных единицах для реализации “резинового” размещения.

При использовании этого упаковщика, нам необходимо указывать координаты каждого виджета. Например:

button1.place(x=0,y=0)

Аргументы упаковщика:

  • anchor (“n”, “s”, “e”, “w”, “ne”, “nw”, “se”, “sw” или “center”) – какой угол или сторона размещаемого виджета будет указана в аргументах x/y/relx/rely. По умолчанию “nw” – левый верхний;
  • bordermode (“inside”, “outside”, “ignore”) – определяет в какой степени будут учитываться границы при размещении виджета;
  • in_ – явное указание в какой родительский виджет должен быть помещён;
  • x и y – абсолютные координаты (в пикселях) размещения виджета;
  • width и height – абсолютные ширина и высота виджета;
  • relx и rely – относительные координаты (от 0.0 до 1.0) размещения виджета;
  • relwidth и relheight – относительные ширина и высота виджета.

Пример использования упаковщика place():

from tkinter import *
 
root = Tk()
root.geometry('300x300')
 
Button(bg='red').place(x=75, y=20)
Button(bg='green').place(relx=0.3, rely=0.5)
 
root.mainloop()

Будет выведено:


Библиотека Tkinter: Упаковщики.

Еще один пример использования упаковщика place():

from tkinter import *
 
root = Tk()
root.geometry('300x300')

Label(bg='white').place(x=10, y=10, 
                    width=50, height=30)
Label(bg='green').place(x=10, y=50, 
                    relwidth=0.3, relheight=0.15)
 
root.mainloop()

Будет выведено:


Библиотека Tkinter: Упаковщики.

 
Поделиться в facebook
Facebook
Поделиться в twitter
Twitter
Поделиться в vk
VK
Поделиться в google
Google+
Поделиться в email
Email

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Группа в VK

Помощь проекту

Обнаружили опечатку?

Сообщите нам об этом, выделите текст с ошибкой и нажмите Ctrl+Enter, будем очень признательны!

Свежие статьи

Похожие статьи

Библиотека Tkinter: ttk.

Библиотека Tkinter: ttk.

ttk (themed tk) – это расширение tcl/tk с новым набором виджетов. В ttk используется новый движок для создания виджетов. Этот движок обладает поддержкой тем и

 
Библиотека Tkinter: Изображения.

Библиотека Tkinter: Изображения.

Для работы с изображениями в Tkinter имеется два класса BitmapImage и PhotoImage. BitmapImage представляет собой простое двухцветное изображение, PhotoImage – полноцветное изображение. BitmapImage Конструктор класса

 
Библиотека Tkinter: Методы виджетов.

Библиотека Tkinter: Методы виджетов.

Все виджеты в Tkinter обладают некоторыми общими методами. В этой статье мы познакомимся с такими методами. Список всех виджетов можно изучить в статье “Библиотека Tkinter:

 

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: