Язык программирования Python.

Менеджеры расположения.

Следующий пример достаточно нагляден, чтобы понять принципы работы менеджеров расположения, имеющихся в Tk. В трех рамках можно применить различные менеджеры: pack, grid и place:

From Tkinter import *

Tk = Tk().

# Создаем три рамки.

Frames = {}.

B = {}.

For fn in 1, 2, 3:

 f = Frame(tk, width=100, height=200, bg="White").

 f.pack(side=LEFT, fill=BOTH).

 frames[fn] = f.

 for bn in 1, 2, 3, 4: # Создаются кнопки для каждой из рамок.

  b[fn, bn] = Button(frames[fn], text="%s.%s" % (fn, bn)).

# Первая рамка:

# Сначала две кнопки прикрепляются к левому краю.

B[1, 1].pack(side=LEFT, fill=BOTH, expand=1).

B[1, 2].pack(side=LEFT, fill=BOTH, expand=1).

# Еще две — к нижнему.

B[1, 3].pack(side=BOTTOM, fill=Y).

B[1, 4].pack(side=BOTTOM, fill=BOTH).

# Вторая рамка:

# Две кнопки сверху.

B[2, 1].grid(row=0, column=0, sticky=NW+SE).

B[2, 2].grid(row=0, column=1, sticky=NW+SE).

# и одна на две колонки в низу.

B[2, 3].grid(row=1, column=0, columnspan=2, sticky=NW+SE).

# Третья рамка:

# Кнопки высотой и шириной в 40% рамки, якорь в левом верхнем углу.

# Координаты якоря 1/10 от ширины и высоты рамки.

B[3, 1].place(relx=0.1, rely=0.1, relwidth=0.4, relheight=0.4, anchor=NW).

# Кнопка строго по центру. Якорь в центре кнопки.

B[3, 2].place(relx=0.5, rely=0.5, relwidth=0.4, relheight=0.4, anchor=CENTER).

# Якорь по центру кнопки. Координаты якоря 9/10 от ширины и высоты рамки.

B[3, 3].place(relx=0.9, rely=0.9, relwidth=0.4, relheight=0.4, anchor=CENTER).

Tk.mainloop().

Результат следующий:

Язык программирования Python.

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

Менеджер grid помещает виджеты в клетки сетки (это очень похоже на способ верстки таблиц в HTML). Каждому располагаемому виджету даются координаты в одной из ячеек сетки (row — строка, column — столбец), а также, если нужно, столько последующих ячеек (в строках ниже или в столбцах правее) сколько он может занять (свойства rowspan или columnspan). Это самый гибкий из всех менеджеров.

Менеджер place позволяет располагать виджеты по произвольным координатам и с произвольными размерами подчиненных виджетов. Размеры и координаты могут быть заданы в долях от размера виджета–хозяина.

Непосредственно внутри одного виджета нельзя использовать более одного менеджера расположения: менеджеры могут наложить противоречащие ограничения на вложенные виджеты и внутренние виджеты просто не смогут быть расположены.