Как сделать так, чтобы ваши виджеты складывались — wxPython #53

В wxPython 2.9, разработчики представили миру новый тип сайзеров, благодаря которому виджеты меняли положение в соответствии с тем, как пользователь изменяет размер окна. Они получили название wx.WrapSizer. По каким-то причина, он относительно непопулярен, так что потратим несколько минут на то, чтобы понять, как его использовать. К концу этой статьи вы сможете самостоятельно врапать ваши виджеты!

Используя WrapSizer

Как сделать так, чтобы ваши виджеты складывались - wxPython #53

Виджет wx.WrapSizer работает по тому же принципу, что и wx.BoxSizer. Всё, что вам нужно – вставить его и добавить внутрь виджеты. Давайте взглянем на простую программу:

Здесь мы создаём инстанцию для нашего сайзера, а затем запускаем цикл из букв английского алфавита, создавая кнопку для каждой буквы. Мы также изменяем цвет фона каждой буквы для того, чтобы добавить немного разнообразия. Если вы ещё не догадались, то этот пример основан на демо-пакете wxPython. Вы заметите, что, когда вы изменяете размер рамки, кнопки перемещаются в попытках занять оптимальное положение. Иногда, они могут даже немного изменить размер. Давайте немного поговорим о самом сайзере.

Есть вопросы по Python?

На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!

Telegram Чат & Канал

Вступите в наш дружный чат по Python и начните общение с единомышленниками! Станьте частью большого сообщества!

Паблик VK

Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!

Вы можете задать ориентацию для wx.WrapSizer, а также вы можете устанавливать флаги во время его размещения. Флаги ориентации — wx.HORIZONTAL и wx.VERTICAL. Горизонтальный является значением по умолчанию. Согласно документации «параметры флага могут быть комбинацией значений EXTEND_LAST_ON_EACH_LINE, которое позволяет последнему итему в строке занимать всё оставшееся в ней место, и REMOVE_LEADING_SPACES, убирающее любые элементы спейсера из начала ряда.»

WrapSizer, помимо основного метода wx.Sizer, обладает ещё четырьмя дополнительным методами: CalcMin (рассчитывает минимальный размер), InformFirstDirection (похоже, вовсе не используется), IsSpaceItem (может быть использован для того, чтобы заставить нормальные итемы вести себя как сайзеры) and RecalcSizes (имплементирует расчёты измерений бокс-сайзера и затем устанавливает размер его «детей»).

Итоги

Теперь вы уже должны знать достаточно, для того, чтобы уверенно использовать wx.WrapSizer в ваших приложениях. Это действительно удобный сайзер, но, к сожалению, не так много приложений, в которых необходимо его присутствие. Но если вам всё-таки нужно врапать много кнопок – это отличный вариант.