Опубликован: 22.12.2005 | Уровень: для всех | Доступ: платный
Лекция 12:

Создание приложений с графическим интерфейсом пользователя

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

Следующий пример достаточно нагляден, чтобы понять принципы работы менеджеров расположения, имеющихся в 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 позволяет располагать виджеты по произвольным координатам и с произвольными размерами подчиненных виджетов. Размеры и координаты могут быть заданы в долях от размера виджета-хозяина.

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

Сергей Крупко
Сергей Крупко

Добрый день.

Я сейчас прохожу курс  повышения квалификации  - "Профессиональное веб-программирование". Мне нужно получить диплом по этому курсу. Я так полагаю нужно его оплатить чтобы получить диплом о повышении квалификации. Как мне оплатить этот курс?

 

Павел Ялганов
Павел Ялганов

Скажите экзамен тоже будет ввиде теста? или там будет какое то практическое интересное задание?

Мария Кравцова
Мария Кравцова
Россия, Сочи, РГПУ им. А.И.Герцена, 1997
Екатерина Архангельская
Екатерина Архангельская
Россия, СПбГУАП