Как переключаться между панелями — wxPython #37

Каждые пару месяцев я встречаю тему, автор которой спрашивает, как ему переключаться между панелями в wxPython приложении, над которым он работает. Так как это довольно распространённый вопрос: за прошлую неделю меня 3 раза спрашивали об этом на моём IRC-канале, я написал короткий скрипт, выполняющий данную задачу.

Учтите, что в большинстве случаев пользователь сочтёт полезным лишь один из массы виджетов для ноутбука. Но, в любом случае, давайте научимся сделать это.

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

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

Telegram Чат & Канал

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

Паблик VK

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

В данном примере мы будем использовать меню, чтобы переключаться между двумя панелями. Первая панель будет иметь только текстовый контроль, а вторая – только виджет сетки.

Вот первая панель:

Как переключаться между панелями - wxPython #37

И вот панель, на которую вы можете переключиться:

Как переключаться между панелями - wxPython #37

Теперь вы знаете как должен выглядеть конечный результат, так что давайте взглянем на код, позволяющий переключатся между панелями.

Код, который нас интересует, размещён в хэндлере события onSwitchPanels. Здесь мы используем условное выражение, чтобы проверить какая панель сейчас отображается, а затем скрываем её, чтобы отобразить вторую панель. Мы также задаём название окна, чтобы дать пользователю знать, какая панель сейчас отображается.

Также нам нужно вызвать метод панели под названием Layout(), чтобы сделать панели видимыми. В обратном случае, вы можете столкнуться со странными аномалиями отображения. Например, в панели не будет ничего отображаться до тех пор, пока вы значительно не измените её размер.

Итоги

Теперь вы знаете как переключатся между панелями. Если вы планируете добавить много визуальных элементов, вроде добавления и удаления виджетов, вам стоит обратить внимание на методы Freeze и Thaw, а уже затем запускать метод Layout. Они помогут избавиться от мерцания, которое может возникнуть в результате модифицирования дочерних панелей.