Язык программирования 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()

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


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

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

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

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



Содержание раздела