Опубликован: 22.12.2005 | Доступ: свободный | Студентов: 17068 / 526 | Оценка: 4.18 / 3.71 | Длительность: 16:16:00
ISBN: 978-5-9556-0109-0
Лекция 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 позволяет располагать виджеты по произвольным координатам и с произвольными размерами подчиненных виджетов. Размеры и координаты могут быть заданы в долях от размера виджета-хозяина.

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

Зураб Муциев
Зураб Муциев

Здравствуйте друзья, коллеги.

С кем из тьюторов вы работаете? Просто возникают вопросы, и хочется чтоб обяснили на примере как это происходит, гугл не всегда дает ответа.

Постить в соц сетях, там не всегда адекват, и чаще они базарят не по делу.

Андрей Егоров
Андрей Егоров

def bin(n):

"""Цифры двоичного представления натурального числа """

if n == 0:

   return []

n, d = divmod(n, 2)

return bin(n) + [d]

print bin(69)

Что значит здесь return[] ? Возвращает список? Непонятно какой список? Откуда он? 

 

 

Ольга Горбунова
Ольга Горбунова
Россия, липецк, мбоу сш №68, 2017