Основы изменения размеров виджетов

osnovy izmeneniya razmerov vidzhetov Графические интерфейсы пользователя

Размер окон верхнего уровня — таких как окно, создававшееся во всех продемонстрированных до сих пор вариантах, обычно может изменяться пользователем — нужно просто растянуть окно с помощью мыши. На рис. 7.2 показано, как выглядит увеличенное в размерах окно.

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

Пример 7.6. PP4E\Gui\Intro\gui1e.py — растягивание окна

from tkinter import *

Label(text=’Hello GUI world!’).pack(expand=YES, fill=BOTH) mainloop()

Рис. 7.2. Увеличенное окно сценария gui1

 

При размещении виджетов можно указывать, должен ли виджет увеличиться в размерах, чтобы заполнить все свободное пространство, и если да, то как он должен измениться, чтобы заполнить все это пространство. По умолчанию виджеты не увеличиваются вслед за родителем. Но в данном сценарии имена YES и BOTH (импортированные из модуля tkinter) указывают, что метка должна увеличиваться вместе со своим родителем, то есть с главным окном. Так оно и происходит, как видно на рис. 7.3.

Рис. 7.3. Сценарий gui1e c виджетом, изменяющим размер

 

Технически, менеджер компоновки назначает размер каждому отображаемому виджету, исходя из его содержимого (длины текстовой строки и так далее). По умолчанию виджет может занимать только отведенное ему пространство и не может быть больше назначенного ему размера. Параметры expand и fill позволяют более точно определять правила автоматического изменения размеров:

Параметр expand=YES

Предлагает менеджеру компоновки выделять виджету все свободное пространство в родительском контейнере, не занятое другими вид-

жетами.

Параметр fill

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

Сочетания этих двух параметров производят различные эффекты расположения и изменения размеров, при этом некоторые из них имеют смысл только при наличии в окне нескольких графических элементов. Например, использование параметра expand без fill приводит к размещению виджета в центре занимаемого им пространства, а параметр fill может определять возможность изменения размеров только по вертикали (fill=Y), только по горизонтали (fill=X) или по обеим осям одновременно (fill=BOTH). Определяя эти ограничения и стороны прикрепления для всех виджетов в графическом интерфейсе наряду с порядком размещения, можно довольно точно управлять их взаимным расположением. В последующих главах будет показано, что менеджер компоновки grid использует совершенно другой протокол изменения размеров, но при необходимости может обеспечивать похожий порядок размещения.

Впервые столкнувшись с этим, можно запутаться, и мы вернемся к этому позднее. Но если вы не уверены в том, какой результат будет иметь некоторая комбинация параметров expand и fill, просто попробуйте, что получится, — в конце концов, это Python. А пока запомните, что комбинация expand=YES и fill=BOTH встречается, вероятно, чаще всего и означает «изменить размеры отведенного мне места, чтобы оно занимало все свободное пространство, и растянуть меня так, чтобы заполнить освободившееся пространство во всех направлениях». Для нашего примера «Hello World» итоговым результатом будет рост метки при увеличении размеров окна, поэтому метка всегда остается в центре.

Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, I том, 2011

Оцените статью
Секреты программирования
Добавить комментарий