Помимо порядка добавления на взаимное расположение виджетов оказывает влияние также уже знакомый параметр fill, позволяющий растягивать виджет так, чтобы он занимал все пространство вдоль выделенного ему пустого края, а все пустое пространство, оставшееся после расстановки элементов, поровну распределять между виджетами, при добавлении которых был указан параметр expand=YES. Например, следующий фрагмент создает окно, изображенное на рис. 7.16 (сравните с рис. 7.15).
Button(win, text=’Hello’, command=greeting).pack(side=LEFT,fill=Y)
Label(win, text=’Hello container world’).pack(side=TOP)
Button(win, text=’Quit’, command=win.quit).pack(side=RIGHT, expand=YES,fill=X)
Рис. 7.16. Компоновка с параметрами expand и fill
Чтобы все эти элементы увеличивались вместе с окном, необходимо сделать содержащий их контейнер расширяемым — виджеты расширяются за пределы своего первоначального положения, только если расширяются все их родители. Ниже демонстрируются изменения в gui4.py:
win = Frame()
win.pack(side=TOP, expand=YES, fill=BOTH)
Button(win, text=’Hello’, command=greeting).pack(side=LEFT, fill=Y)
Label(win, text=’Hello container world’).pack(side=TOP)
Button(win, text=’Quit’, command=win.quit).pack(side=RIGHT, expand=YES,fill=X)
При выполнении этого фрагмента фрейм получит весь верхний край родительского окна, как и раньше (то есть верхний участок корневого окна). Однако теперь он настроен так, что должен расширяться и заполнять неиспользуемое пространство своего родителя в обоих направлениях, поэтому он и все прикрепленные к нему дочерние элементы расширяются вместе с окном, как показано на рис. 7.17.
Рис. 7.17. Расширяемый фрейм в увеличенном окне gui4
Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, I том, 2011