Сворачиваем приложение в трей — wxPython #30

Эта статья посвящена теме, на вопросы по которой я часто натыкаюсь. С помощью wxPython реализовать возможность сворачивания вашего приложения в трей достаточно просто. Мы начнём с того, что разберёмся с кодом, создающим TaskBarIcon, а затем перейдём к созданию простого приложения, которое можно будет свернуть в системный трей.

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

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

Telegram Чат & Канал

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

Паблик VK

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

Создаём простую иконку панели задач

Создать иконку панели задач с помощью wxPython очень просто, особенно, если у вас уже есть готовый файл иконки. Давайте взглянем на один простой способ:

Как вы видите, всё что нам нужно это указать путь к файлу иконки в wx.Icon, а затем сообщить о том, какой тип файла мы ему передали. Затем мы просто вызываем метод **SetIcon() в wx.TaskBarIcon, чтобы установить иконку. Если у вас нет файла иконки, то вы можете воспользоваться альтернативным методом, чтобы создать его из файла изображения другого типа:

В данном случае мы проделываем несколько операций, чтобы превратить PNG-изображение в формат, который смогут использовать методы wxPython. Вы заметите, что мы биндим EVT_TASKBAR_LEFT_DOWN, так что когда пользователь нажмёт на иконку, то приложение развернётся.

Примечание: Как я уже упоминал в прошлой статье, нам нужно будет обновить этот код, если вы собираете использовать его в wxPython Phoenix, так как класс TaskBarIcon был перемещён в wx.adv. Если вы используете wxPython Phoenix, то код должен выглядеть вот так:

Теперь у вас есть примеры обеих вариантов кода. Давайте же теперь перейдём к самому приложению, которое будет сворачиваться!

Делаем так, чтобы приложение сворачивалось в трей

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

Здесь мы биндим два события. Первое для EVT_CLOSE и второе для EVT_ICONIZE. Второе запускается, когда пользователь сворачивает приложение, чтобы поместить иконку в трей: проще говоря, оно просто прячет рамку. Первое же запускается, когда вы закрываете приложение, и вот на этот момент стоит обратить внимание.

Почему? Так, вам нужно отследить событие, отвечающее за закрытие, если пользователь пытается закрыть приложение, используя иконку в трее. И вам нужно быть уверенным, что вы удалили иконку И уничтожили её, или же ваше приложение не закроется, а просто будет висеть среди фоновых процессов.

Итоги

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