padx pady tkinter что это
Метод grid
Табличный способ размещения предпочтителен из-за его гибкости и удобства, когда дело доходит до разработки относительно сложных интерфейсов. Grid позволяет избежать использования множества фреймов, что неизбежно в случае упаковщика Pack.
При размещении виджетов методом grid родительский контейнер (обычно это окно) условно разделяется на ячейки подобно таблице. Адрес каждой ячейки состоит из номера строки и номера столбца. Нумерация начинается с нуля. Ячейки можно объединять как по вертикали, так и по горизонтали.
На рисунке пунктир обозначает объединение ячеек. Общая ячейка в таком случае обозначается адресом первой.
Никаких предварительных команд по разбиению родительского виджета на ячейки не выполняется. Tkinter делает это сам, исходя из указанных позиций виджетов.
Пусть надо запрограммировать такой GUI:
Представим данный интерфейс в виде таблицы и пронумеруем ячейки, в которых будут располагаться виджеты:
Выполнив приведенный выше программный код, получим:
Кроме этого есть атрибут sticky (липкий), который принимает значения направлений сторон света (N, S, W, E, NW, NE, SW, SE). Если, например, указать NW, то виджет прибьет к верхнему левому углу ячейки. Виджеты можно растягивать на весь объем ячейки ( sticky=N+S+W+E ) или только по одной из осей ( N+S или W+E ). Эффект от «липучки» заметен, только если виджет меньше ячейки.
С помощью методов grid_remove и grid_forget можно сделать виджет невидимым. Отличие между этими методами лишь в том, что grid_remove запоминает прежнее положение виджета. Поэтому для его отображения в прежней ячейки достаточно применить grid без аргументов. После grid_forget потребуется заново конфигурировать положение виджета.
В данной программе голубая метка после удаления будет появляться в том же месте, где была до этого, несмотря на то, что в функции rem к ней применяется метод grid без настроек. В отличие от нее зеленая метка, если ей не указать место размещения после удаления, появлялась бы под кнопками.
Скрытие виджетов бывает необходимо в тех случаях, когда, например, от выбора пользователя в одной части интерфейса зависит, какие виджеты появятся в другой.
Практическая работа
Курс с примерами решений практических работ: android-приложение, pdf-версия.
Русские Блоги
Подробное объяснение всех атрибутов пакета Tkinter
expand
Параметр expand указывает, что контейнер находится во всем окне, и контейнер помещается в центр оставшейся свободной позиции (включая горизонтальное и вертикальное направления).
expand = 1 или expand = «yes», означает размещение в центре.
expand = 0 или expand = «no», что означает отсутствие расширения по умолчанию.
заливка и сторона
fill указывает, заполнен ли контейнер относительно всего окна. Приоритет этого параметра выше, чем ширина и высота; есть три варианта настройки,
fill = «x», означает горизонтальную заливку
fill = «y», означает вертикальную заливку
fill = «both», что означает и горизонтальное, и вертикальное заполнение.
При использовании вместе с боковой стороной следует учитывать несколько вышеперечисленных вариантов заполнения:
Когда side = «left» или side = «right», fill = «x» не работает, можно заполнить только y
side = «top», side = «bottom», fill = «y» не работает, только заполните x
Если несколько контейнеров используют одну и ту же сторону, они будут расположены в направлении стрелки:
padx, pady и ipadx, ipady
1. Проще говоря, padx и pady представляют 2 контейнера или требуемое расстояние между контейнером и границей (x симметричен сверху вниз, y симметричен слева направо)
2. ipadx и ipady представляют расстояние между содержимым контейнера и границей контейнера, которое также является симметричным;
Следующие 2 описания столбцов;
ipadx и ipady:
anchor
Прежде всего, якорь имеет 9 параметров для установки n, s, w, e, nw, ne, sw, se, center. Это сокращения английского языка для каждого направления.
Одно замечание: когда якорь размещает контейнер, он размещается относительно каждой строки. Более полезно контролировать положение каждого контейнера в каждой строке. Если вы хотите добиться относительного положения относительно всего окна, вы можете обратиться к приведенному выше использованию сторон.
После, до, в этих трех в основном не используются
Наконец, я рекомендую хорошую статью, резюмированную другими, ссылка следующая:
Общие методы и свойства модуля tkinter
Разметка виджетов в Tkinter — pack, grid и place
В данном уроке по изучению Tkinter мы познакомимся с менеджерами разметки. Когда мы создаем графический интерфейс нашего приложения, мы определяем, какие виджеты будем использовать, и как они будут расположены в приложении. Для того, чтобы организовать виджеты в приложении, используются специальные невидимые объекты – менеджеры разметки.
Содержание курса
Содержание статьи
Существует два вида виджетов:
Контейнеры объединяют виджеты для формирования разметки. У Tkinter есть три встроенных менеджера разметки: pack, grid и place.
Метод place() в Tkinter — Абсолютное позиционирование
В большинстве случаев разработчикам необходимо использовать менеджеры разметки. Есть несколько ситуаций, в которых следует использовать именно абсолютное позиционирование. В рамках абсолютного позиционирования разработчик определяет позицию и размер каждого виджета в пикселях. Во время изменения размеров окна размер и позиция виджетов не меняются.
Изображения из примера:
Сохраните их в папке рядом с файлом absolute.py код для которого будет ниже.
Таким образом, на разных платформах приложения выглядят по-разному. То, что выглядит нормально на Linux, может отображаться некорректно на Mac OS. Изменение шрифтов в нашем приложении также может испортить разметку. Если мы переведем наше приложение на другой язык, мы должны доработать и разметку.
Мы покажем, как компоновать виджеты методом pack (также его опции). Несколько примеров помогут продемонстрировать правильную конфигурацию.
Запустите программу, у вас появится такое окно,
Как видно, buttonWest щёлкает на левой стороне окна, а buttonEast щёлкает на правой стороне. Вы можете попробовать масштабировать размер окна внизу, но вы увидите, что они все равно будут цепляться за боковые стороны окна и относительное положение не изменится.
Попробуйте ответить сами или проверьте, запустив следующие коды.
Tkinter pack для добавления внутренней и внешней подкладки виджета
Tkinter pack Макет Заполнение в направлении х, у
Следующая реализация кода может автоматически заполнить размер виджета той же шириной или той же высотой, что и окно, а при увеличении окна размер элемента управления может автоматически изменяться вместе с размером окна.
butonX.pack(fill=’x’) означает, что buttonX заполнит ширину всего окна. Аналогично, fill=’y’ заполнит высоту всего окна, а тем временем fill=’both’ заполнит и ширину, и высоту.
expand=0 отключает поле списка для автоматического показа всех элементов.
Tkinter grid Метод раскладки
grid часто используется в диалоговых окнах, и вы можете разместить виджеты, основываясь на координатах положения сетки. Метод компоновки grid может иметь стабильные относительные позиции всех виджетов.
Tkinter grid column и row опции
Опция Tkinter grid sticky
sticky определяет, как виджет прилипает к ячейке, когда виджет меньше ячейки.
sticky | Значение |
---|---|
W | держаться левее |
E | держаться правой руки |
N | держаться сверху |
S | держаться дна |
Опции Tkinter columnspan и rowspan
Метод Tkinter place Метод
Метод Tkinter place помещает виджет в абсолютное или относительное положение в окне. Мы по-прежнему используем тот же подход, что и выше для введения опций этого метода компоновки.
Tkinter place Абсолютная позиция
Tkinter place относительное положение
Недостатком абсолютной позиции является то, что если в окне размещены другие виджеты с относительными позициями, то при масштабировании окна виджет, использующий абсолютное расположение позиций, возможно, будет иметь перекрытие с другими виджетами.
Метод place также имеет опцию относительной позиции, то есть,
Где relx и rely находятся в диапазоне 0.0
Например, relx=0.5, rely=0.5 означает, что виджет размещается в 50% от ширины окна и 50% от высоты окна.
Создание макетов окна / tkinter 5
Виджеты определяют, какие действия смогут выполнять пользователи с помощью графического интерфейса. Однако важно обращать внимание на их взаимное и индивидуальное расположение. Эффективные макеты позволяют интуитивно определять значение и приоритетность каждого графического элемента, так что пользователь способен быстро разобраться, как нужно взаимодействовать с программой.
Макет также определяет внешний вид, который должен прослеживаться во всем приложении. Например, если кнопки расположены в правом верхнем углу, то они должны находиться там всегда. Хотя это может казаться очевидным для разработчиков, конечные пользователи будут путаться, если не провести их по приложению.
В этом материале погрузимся в разные механизмы, которые Tkinter предлагает для формирования макета, группировки виджетов и управления другими атрибутами, например, размером и отступами.
Группировка виджетов с фреймами
Фрейм представляет собой прямоугольную область окна, обычно используемую в сложных макетах. В них содержатся другие виджеты. Поскольку у фреймов есть собственные внутренние отступы, рамки и фон, то нужно отметить, что группа виджетов связана логически.
Еще одна распространенная особенность фреймов — инкапсуляция части функциональности приложения таким образом, что с помощью абстракции можно спрятать детали реализации дочерних виджетов.
Дальше будут рассмотрены оба сценария на примере создания компонента, который наследует класс Frame и раскрывает определенную информацию о включенных виджетах.
Создадим приложение, которое будет включать два списка, где первый — это список элементов, а второй изначально пустой. Оба можно пролистывать. Также есть возможность перемещать элементы между ними с помощью двух кнопок по центру:
Как работает группировка виджетов
Эти методы используются в родительском классе для перемещения элемента из одного списка в другой:
Также можно воспользоваться особенностями контейнеров родительского фрейма, чтобы правильно размещать их с нужными внутренними отступами:
Благодаря фреймам вызовы управлять геометрией макетов проще.
Еще одно преимущество такого подхода — возможность использовать geometry manager в контейнерах каждого виджета. Это могут быть grid() для виджетов во фрейме или pack() для укладывания фрейма в основном окне.
Однако смешивать эти менеджеры в одном контейнере в Tkinter запрещено. Из-за этого приложение просто не будет работать.
Geometry manager Pack
Это один из трех доступных в Tkinter менеджеров и он отлично подходит для простых макетов, как в случае, когда, например, нужно разместить все друг над другом или рядом.
Предположим, что нужно получить следующий макет для приложения:
Он состоит из трех строк, где в последней есть три виджета, расположенных рядом друг с другом. В таком случае Pack сможет добавить виджеты как требуется без использования дополнительных фреймов.
Для этого будут использоваться пять виджетов Label с разными текстом и фоном, что поможет различать каждую прямоугольную область:
Также были добавлены параметры в словаре opts . Они делают яснее размеры каждой области:
Как работает Pack
Чтобы лучше понимать принципы работы Pack, разберем пошагово, как виджеты добавляются в родительский контейнер. Стоит обратить особое внимание на значение параметра side , который определяет относительное положение виджета по отношению к следующему в этом же контейнере.
Определение стороны label_e особой роли не играет, поскольку это последний виджет, который добавляется в контейнер.
Важно запомнить, что это основная причина, почему порядок так важен при работе с Pack. Чтобы не столкнутся с непредвиденными результатами в сложных макетах распространенной практикой считается их расположение в пределах фрейма так, что бы они не пересекались.
В таких случаях рекомендуется использовать geometry manager Grid, поскольку он позволяет прямо задавать положение каждого виджета с помощью вызова geometry manager и избегать использования дополнительных фреймов.
Geometry manager Grid
Grid — самый гибкий из всех доступных geometry manager. Он полностью переосмысливает концепцию сетки (grid), которая традиционно используется при дизайне пользовательских интерфейсов. Сетка — это двумерная таблица, разделенная на строки и колонки, где каждая ячейка представляет собой пространство, которое доступно для виджета.
Продемонстрируем работу Grid с помощью следующего макета:
Его можно представить в виде таблицы 3×3, где виджеты во второй и третьей колонках растягиваются на две строки, а виджет в третьей строке занимает все три колонки.
Как и в предыдущем варианте используем 5 меток с разным фоном, чтобы проиллюстрировать распределение ячеек:
Также будем передавать словарь параметров, включающий внутренний отступ, который растянет виджеты на все доступное пространство внутри ячеек.
Как работает Grid
Расположение label_a и label_b говорит само за себя: они занимают первую и вторую строки первой колонки соответственно (важно не забывать, что индексация начинается с нуля):
Важно запомнить, что в отличие от Pack есть возможность менять порядок вызовов к grid() для каждого виджета без изменения финального макета.
Например, sticky=tk.N выравнивает виджет у верхней границы ячейки (north – север), а sticky=tk.SE — в правом нижнем углу (south-ease – юго-восток).
Если параметру sticky значение не передается, виджет располагается по центру ячейки.
Geometry manager Place
Менеджер Place позволяет задать положение и размер виджета в абсолютном или относительном значении.
Из трех менеджеров этот является наименее используемым. С другой стороны, он может работать со сложными сценариями, где есть необходимость свободно разместить виджет или перекрыть другой.
Для демонстрации работы Place повторим следующий макет, смешав абсолютные и относительные положения и размеры:
Метки, которые будут отображаться, имеют разный фон и определены в том порядке, в котором они будут расположены слева направо и сверху вниз:
Если запустить эту программу, то можно будет увидеть наложение label_c и label_d в центре экрана. Этого не удастся добиться с помощью других менеджеров.
Как работает Place
Наконец, пятая метка использует абсолютное позиционирование и относительный размер. Как можно было заметить, эти размеры легко переключаются, поскольку значение размера родительского контейнера предполагается (200 х 200 пикселей). Однако при изменении размера основного окна будут работать только относительные величины. Это поведение легко проверить.
Еще одно важное преимущество Place — возможность совмещать его с Pack и Grid.
Например, представьте, что есть необходимость динамически отобразить текст на виджете при нажатии правой кнопкой мыши на нем. Его можно представить в виде виджета Label, который располагается в относительном положении при нажатии:
Лучше всего использовать другие менеджеры в своих приложениях Tkinter, а специализированные оставить для случаев, когда нужно кастомное позиционирование.
Группировка полей ввода с помощью виджета LabelFrame
Поскольку цель этого примера — показать финальный макет, добавим некоторые виджеты без сохранения их ссылок в виде атрибутов: