Динамическое добавление и удаление виджетов — wxPython #1

Динамическое добавление и удаление виджетов - wxPython #1

Создание и удаление виджетов являются довольно распространёнными заданиями, но большинство разработчиков не в восторге от него. Однако, wxPython способен значительно упростить данный процесс. Я сам неоднократно разрабатывал виджеты, основываясь на том, какие функции необходимы конечному пользователю программы, так что я могу ознакомить вас с массой вариантов. Например, администратор может получить дополнительные возможности, доступа к которым простые пользователи иметь не будут. В этом случае возникает ситуация, когда вам нужно быстро убрать или добавить административную панель с виджетами.

Я, к примеру, решил эту проблему очень просто. Это приложение даёт пользователям возможность добавлять и убирать кнопки, и ничего больше. Скрипт, который вы найдёте ниже, позволит вам создать окно, похожее на то, что вы видите в начале статьи. Когда вы нажмёте кнопку «Add» несколько раз, вы должны будете увидеть что-то вроде этого:

Динамическое добавление и удаление виджетов - wxPython #1

Как вы могли заметить, вы добавили несколько кнопок. Теперь давайте уделим мгновение и прочтём код. Я объясню этот код сразу же после того, как вы его прочтёте.

Я думаю, что это довольно простой код, так что я сфокусирую ваше внимание на важных битах. Первая тема, о которой я хотел бы рассказать, это метод под названием Frame’s Fit(). Я обычно избегаю использования фита, но у меня были проблемы с изменением размера окна в момент добавления новых кнопок, и фит справился с этим. Стоит отметить, что фит постоянно пытается подогнать виджеты под окно, и, иногда, мне не нравится как это выглядит.

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

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

Telegram Чат & Канал

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

Паблик VK

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

Как бы то ни было, следующий бит демонстрирует методы onAddWidget и onRemoveWidget. Обычно вам требуется два слоя: первый отвечает за размеры и обновления контейнера, второй за добавление и удаление виджетов. Весьма странно, но похоже, что фит делает это автоматически, так что вы можете смело удалять всё, что находится выше строки Layout(). Я убирал фиты, чтобы проверить, справится ли Layout с задачей подгона под контейнер, но как только я удалил фиты, размер контейнера перестал подстраиваться под количество кнопок, так что без фитов в данном случае не обойтись. Однако, если вы добавляете виджеты, которые точно поместятся в контейнере, вам будет достаточно и одного Layout.

В конце я хотел бы добавить небольшой комментарий. Вы также можете использовать Layout() в конце обновления Freeze / Thaw.

Подведем итоги

Благодаря этой статье вы должны научиться добавлять и удалять виджеты довольно быстро. Когда вы полностью освоите данное приложение, вы будете поражены его простотой и эффективностью. Это фрагмент информации, который я считаю очень полезным, так как сам пользуюсь данной техникой на протяжении многих лет.

Продолжение

Следующий урок №2: Как сделать скриншот вашего приложения