как свернуть приложение в трей python
Сворачиваем приложение в трей — 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. Второе запускается, когда пользователь сворачивает приложение, чтобы поместить иконку в трей: проще говоря, оно просто прячет рамку. Первое же запускается, когда вы закрываете приложение, и вот на этот момент стоит обратить внимание.
Почему? Так, вам нужно отследить событие, отвечающее за закрытие, если пользователь пытается закрыть приложение, используя иконку в трее. И вам нужно быть уверенным, что вы удалили иконку И уничтожили её, или же ваше приложение не закроется, а просто будет висеть среди фоновых процессов.
Итоги
Теперь вы знаете как свернуть ваше приложение до иконки в системном трее. Я использовал данную возможность в простой программе для проверки электронной почты. У данного навыка есть масса сфер применения, например, проверка состояния выполнения задачи в приложении, свёрнутом в трей.
Являюсь администратором нескольких порталов по обучению языков программирования Python, Golang и Kotlin. В составе небольшой команды единомышленников, мы занимаемся популяризацией языков программирования на русскоязычную аудиторию. Большая часть статей была адаптирована нами на русский язык и распространяется бесплатно.
E-mail: vasile.buldumac@ati.utm.md
Образование
Universitatea Tehnică a Moldovei (utm.md)
Возможно ли свернуть консоль python в трей?
оно почему-то не работает, вроде как библиотеки поставил, но не суть
«можно без шуток про sys.exit() «
Bаcon, жду твоих комментов про то что не умею гуглить
вот тебе сразу статью на англе, угу
Я не очень понял вопрос, но нашёл такое:
# Python 3
import ctypes
ctypes.windll.user32.ShowWindow( ctypes.windll.kernel32.GetConsoleWindow(), 6 )
notepad_handle = ctypes.windll.user32.FindWindowW(u»Notepad», None)
ctypes.windll.user32.ShowWindow(notepad_handle, 6)
исходник из инета ниже
Hemul GM, это как раз таки ты не понимаешь, прочитай вопрос еще раз
а то второй раз мне это говоришь)
еще раз : «Возможно ли свернуть консоль python в трей?»
ответ на вопрос : нет
ах да, НЕ ПОНИМАЕШЬ ЧЕГО САМ ХОЧЕШЬ. восклицательный знак
Повторяю в который раз «Ты не понимаешь, что ты хочешь»
Hemul GM, хорошо, давай по другому, может дойдет
к чему твои слова по типу «ты не знаешь чего ты хочешь», тебе видимо реально трудно дойти до того, чтобы просто пораскинуть мозгами и понять то что я хочу свернуть в трей сам шелл, консоль от питона, понимаешь да?
мне просто стало интересно, а что будет если
как тебе еще это показать, нет примеров больше
ни к селу ни к городу, как и твои слова о том что не знаю чего хочу, уймись уже
я хочу то, что написано в вопросе)
Возможно ли свернуть консоль python в трей?
оно почему-то не работает, вроде как библиотеки поставил, но не суть
«можно без шуток про sys.exit() «
Bаcon, жду твоих комментов про то что не умею гуглить
вот тебе сразу статью на англе, угу
Я не очень понял вопрос, но нашёл такое:
# Python 3
import ctypes
ctypes.windll.user32.ShowWindow( ctypes.windll.kernel32.GetConsoleWindow(), 6 )
notepad_handle = ctypes.windll.user32.FindWindowW(u»Notepad», None)
ctypes.windll.user32.ShowWindow(notepad_handle, 6)
исходник из инета ниже
Hemul GM, это как раз таки ты не понимаешь, прочитай вопрос еще раз
а то второй раз мне это говоришь)
еще раз : «Возможно ли свернуть консоль python в трей?»
ответ на вопрос : нет
ах да, НЕ ПОНИМАЕШЬ ЧЕГО САМ ХОЧЕШЬ. восклицательный знак
Повторяю в который раз «Ты не понимаешь, что ты хочешь»
Hemul GM, хорошо, давай по другому, может дойдет
к чему твои слова по типу «ты не знаешь чего ты хочешь», тебе видимо реально трудно дойти до того, чтобы просто пораскинуть мозгами и понять то что я хочу свернуть в трей сам шелл, консоль от питона, понимаешь да?
мне просто стало интересно, а что будет если
как тебе еще это показать, нет примеров больше
ни к селу ни к городу, как и твои слова о том что не знаю чего хочу, уймись уже
я хочу то, что написано в вопросе)
Аналогичная статья на PyQt5/Python
Сегодня обсудим то, каким образом сворачивать приложение, написанное на фреймворке Qt, в трей операционной системы с помощью класса QSystemTrayIcon. Данная функция является весьма полезной для приложений, которые должны выполняться в фоновом режиме длительное время. Например, приложение видеозаписи или аудио воспроизведения.
Поэтому займёмся следующими вопросами:
Программный код был написан в QtCreator 3.3.1 на основе Qt 5.4.1.
Структура проекта для QSystemTrayIcon
Проект создается как Приложение Qt Widgets, в котором по умолчанию создаются файлы:
Примечание. Большую часть интерфейса создаю в дизайнере, чтобы не загромождать логику основного кода лишней информацией. По сути это лишь дело вкуса и привычки.
mainwindow.ui
Для теста создадим простую и ничем не примечательную формочку с чек-боксом.
Tray.pro
Данный файл оставляем с настройками по умолчанию.
main.cpp
Данный файл также не подвергается изменениям
mainwindow.h
В заголовочном файле уже вносятся изменения, поскольку нам необходимо отслеживать событие закрытия окна, а также необходимо создать обработчик нажатий на иконку приложения в трее. Также в данном файле не забываем подключить все необходимые библиотеки. Иначе проект не скомпилируется.
mainwindow.cpp
Вся логика работы тестируемого приложения заложена в данном классе. Приложение будет сворачиваться в трей только в том случае, если галочкой отмечен чекбокс. Вместо чекбокса может выступать переменная или любой другой способ хранения информации о необходимости работы данной функции.
При этом, чтобы выйти из приложения при отмеченном чекбоксе, используется соответствующий пункт в контекстном меню.
Также, когда приложение сворачивает в трей, то всплывает соответствующее сообщение, которое информирует пользователя о данном событии.
В случае успешной сборки проекта, Ваше приложение с легкостью свернётся в трей колачиком. Пример работы приложения с QSystemTrayIcon показан на следующем видео:
Рекомендуем хостинг TIMEWEB
Рекомендуемые статьи по этой тематике
pySTray: Создание иконки при свертывании программы в трей
Комьюнити, нужна ваша помощь.
создаю программу в tkinter, пишу функцию сворачивания в трей.
И программа работает. Но есть вопрос, Можно ли обойтись без подключения библиотеки PIL. Т.к. при упаковывании программы в pyinstaller, программа раздувается на лишние 12 Мб. Т.е. если не реализовывать функцию сворачивания, программа весит 12 Мб. Как только подключаем PIL размер увеличивается до 25 Мб.
Я думал, что можно заменить Image.open другими средствами, но не мог найти.
Что я делал:
1. Я перевел иконку в строку base64, и пробовал переписать функцию так:
И она тоже работает, но все равно требует PIL
2. Пробовал с помощью плагина pickle перевести Image.open(‘test.ico’) в строку байт.
далее я подставлял строку прямо в объект Icon
И программа работала. И не требовалось подключать PIL. Но только из среды разработки. Как только упаковывалась pyinstaller, прекращала запускаться. Похоже PIL сам подключался при вызове из интерпретатора. Кстати при упаковывании она весила те же 12 Мб.
Подскажите как еще можно обойти подключение PIL? Ведь иконка это поток байтов. Как его еще можно подставить при вызове Icon?
Создание иконки программно + установка в трей
Привет всем! Мне необходимо на иконке нарисовать 2 цифры (00-99) и установить иконку в нотифи Как.
Решение
Про поток ничего сказать не могу. У pystray очень скудная документация.
Читал примеры по pystray, но во всех примерах используется pil для создания иконки.
Почему нельзя использовать средства tkinter, например PhotoImage, я понять не могу.
И еще, pil и pyistaller как я понял не понимают друг друга, поэтому возникает ошибка.
При компиляции через Nuitka приложение раздувается до 90 МБ, что для меня еще более недопустимо.
Добавлено через 3 минуты
А, ну я уже сам вижу:
При запуске программы сразу помещать в трей
Я написал программу она у меня сворачиваеться в трей, а подскажите как сделать так что бы когда.
Сворачивание программы в трей при нажатии на button
Интересует, как реализовать в wpf сворачивание программы в трей при нажатии на какую-либо button.
Автозапуск программы при загрузке ОС и ее сворачивание в трей
В общем написал программу, которая запускается при загрузке ОС. 😎 Всё в общем замечательно.
Ошибка при свертывании меню
Здравствуйте! Очень прошу помочь исправить ошибку. Создаю адаптивное меню аккордеон. В нем есть.
Как сделать чтоб при запуске программы она сразу в трей сворачивалась?
использую компонент CoolTrayIcon ставлю в событие FormCreate фун-ю CoolTrayIcon1.HideMainForm; но.
Подвисает удаленный рабочий стол при свертывании/развертывании
Удаленный рабочий стол подвисает при развертывании, секунд так на 8. Причем на других компах при.