Создание иконок панели задач — wxPython #29

Вы когда-нибудь интересовались тем, как создавать маленькие иконки в трэе Windows, которые будут отображаться в нижнем правом углу экрана? Набор инструментов wxPython предлагает простой способ реализации данной возможности, а эта статья написана специально для того, чтобы научить вас этому.

Однако сначала вам нужно будет найти иконку или создать файл изображения Python посредством утилиты img2py. Я описывал как это сделать в статье «Вставляем иконку в строку заголовка».

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

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

Telegram Чат & Канал

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

Паблик VK

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

Создание иконки панели задач в Classic

Создание подкласса TaskBarIcon является первым необходимым шагом. Это несложно, вам нужно только выбрать подходящие методы, которые позволят иконке отображаться корректно. Давайте взглянем на простой пример для wxPython Classic:

Первый класс основан на том, который вы могли встретить в демонстрационном пакете wxPython. Как я уже упоминал ранее, вы заметите, что мы превращаем wx.TaskBarIcon в подкласс. Мы прикрепляем его иконку к чему-либо, а затем добавляем вспомогательный стринг, который будет отображаться при наведении мыши.

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

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

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

Здесь мы просто подтверждаем класс TaskBarIcon, который мы создали раньше и биндим рамку к EVT_CLOSE. Вас это может удивить. Есть несколько интересных фишек, связанных с использованием панели задач Windows. Если я просто прикажу рамке закрыться, то она закроется нормально, но вот иконка останется и Python вообще ничего не собирается с этим делать.

Если вы хотите просто разрешить пользователю закрыть приложение используя меню, которое выпадает при нажатии правой кнопки мыши на иконку панели задач, тогда вы можете просто добавить метод RemoveIcon и self.Destroy(), и всё будет работать как следует (по каким-то причинам метода RemoveIcon недостаточно для того, чтобы избавиться от TaskBarIcon, так что вам нужно будет в добавок приказать ей себя уничтожить.

Но если пользователь может выйти из приложения ещё и посредством нажатия маленького крестика в верхнем правом углу окна, тогда вам нужно будет обнаружить процесс EVT_CLOSE, и приказать приложение обработать его. Когда вы обнаруживаете данное событие, вы НЕ можете просто вызывать self.Close(), так как это запустит бесконечный цикл. Поэтому мы делаем выбор в пользу self.Destroy().

Создаём иконку панели задач в Phoenix

Создание иконки панели задач в Phoenix значительно отличается от аналогичного процесса в Classic. Причина этому – перемещение класса TaskBarIcon в wx.adv. Для того, чтобы вы до конца всё поняли, я добавляю пример, который был обновлён таким образом, чтобы он запускался в Phoenix:

Главным отличием является то, что здесь мы импортируем wx.adv, и используем его, когда мы определяем и инициализируем TaskBarIcon. Второе отличие – биндинг EVT_TASKBAR_LEFT_DOWN, который также был перемещён в wx.adv. В остальном код остаётся прежним и работает как положено.

Итоги

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