Приложение Tkinter System Tray в Python — пример создания
Приложение system tray — это тип приложения, которое работает в фоновом режиме и обеспечивает быстрый доступ к некоторым функциям. Обычно отображается в виде небольшого значка в системном трее или в области уведомлений на панели задач в среде рабочего стола Windows, macOS или Linux.
Распространенными примерами приложений system tray являются антивирусное программное обеспечение, клиенты мгновенного обмена сообщениями или программное обеспечение для мониторинга системы.
Пользователи могут взаимодействовать с приложением в области уведомлений, нажимая на него, чтобы открыть меню и выполнить определенные действия.
В Tkinter отсутствует встроенная поддержка приложения system tray, но для его создания можно использовать стороннюю библиотеку PyStray.
- Пример создания приложения system tray в Tkinter
- Шаг 1. Установите библиотеки Pystray и Pillow
- Шаг 2. Создание приложения system tray Tkinter
Пример создания приложения system tray в Tkinter
Создание приложения system tray с использованием пакета Tkinter и PyStray включает следующие шаги:
Шаг 1. Установите библиотеки Pystray и Pillow
Установите библиотеки Pystray и Pillow с помощью команды pip. Pystray позволяет создать приложение в трее, а Pillow помогает разработать значок, помещаемый в системный трей.
pip install pystray pillow
Шаг 2. Создание приложения system tray Tkinter
Создайте скрипт Python и используйте следующий код:
import tkinter as tk import pystray from PIL import Image class MyApp(tk.Tk): def __init__(self): super().__init__() self.title("System Tray App") self.geometry('500x250') self.protocol('WM_DELETE_WINDOW', self.minimize_to_tray) def minimize_to_tray(self): self.withdraw() image = Image.open("app.ico") menu =(pystray.MenuItem('Quit', self.quit_window), pystray.MenuItem('Show',self.show_window)) icon = pystray.Icon("name", image, "My App", menu) icon.run() def quit_window(self, icon): icon.stop() self.destroy() def show_window(self, icon): icon.stop() self.after(0,self.deiconify) if __name__ == "__main__": app = MyApp() app.mainloop()
Выход:
App.ico можно скачать здесь:
Как это работает.
- Сначала импортируем необходимые библиотеки:
import tkinter as tk import pystray from PIL import Image
- Во-вторых, определите новый класс MyApp, который расширяет класс tk.Tk. В конструкторе __init__() свяжите событие close с методом minimum_to_tray():
self.protocol('WM_DELETE_WINDOW', self.minimize_to_tray)
При нажатии кнопки «Закрыть» будет выполнен метод minimum_to_tray(), создающий значок в системном трее.
- В-третьих, определите метод minimum_to_tray(), который сворачивает главное окно в системный трей:
def minimize_to_tray(self): self.withdraw() image = Image.open("app.ico") menu =(pystray.MenuItem('Quit', self.quit_window), pystray.MenuItem('Show',self.show_window)) icon = pystray.Icon("name", image, "My App", menu) icon.run()
В методе:
Self.withdraw() скрывает главное окно, не уничтожая его. Это необходимый шаг для минимизации главного окна в системный трей:
def minimize_to_tray(self): # Hide the main window self.withdraw()
Следующий код вызывает метод open() класса Image для загрузки app.ico, который будет использоваться в качестве значка для панели задач:
# Open the image for the system tray icon image = Image.open("app.ico")
Ниже определяется меню для значка на панели задач, которое содержит два объекта PyStray MenuItem:
menu =(pystray.MenuItem('Quit', self.quit_window), pystray.MenuItem('Show', self.show_window))
Пункты меню «Quit» и «Show» связаны с методами self.quit_window и self.show_window соответственно.
Следующая строка создает значок PyStray с указанным изображением и меню:
icon = pystray.Icon("name", image, "My App", menu)
Следующий код вызывает метод run() объекта Icon, чтобы сделать значок активным в системном трее:
icon.run()
Строка icon.run() запускает цикл событий PyStray, делая значок активным в системном трее. Теперь он будет реагировать на взаимодействие пользователя, например, на щелчки по элементам меню.
- В-четвертых, определите quit_window(), связанный с пунктом меню Quit в системном трее. Когда вы выбираете опцию Quit из меню значка системного трея, он останавливает цикл событий PyStray(icon.stop()) и уничтожает главное окно, обеспечивая чистый выход из приложения(self.destroy())
def quit_window(self, icon): icon.stop() self.destroy()
В-пятых, определите метод show_window(), связанный с пунктом меню «Show» на значке панели задач:
def show_window(self, icon): icon.stop() self.after(0,self.deiconify)
При выборе параметра «Show» в меню значка на панели задач значок на панели задач закрывается (останавливается цикл событий PyStray) и используется метод after() для планирования немедленного вызова метода deiconify(), в результате чего основное приложение восстанавливается и снова становится видимым.