После того, как программа уведомлений о тостах выходит из цикла Tray Icon - PullRequest
1 голос
/ 20 марта 2019

Я пытаюсь создать простое приложение на Python, которое добавит иконку в трее. Я также добавляю 2 элемента меню к этому значку на панели задач, один для отображения всплывающего сообщения Windows 10, а другой для остановки приложения.

Программа запускается правильно, появляется значок, также появляется меню. Итак, процесс, который я запустил с self.icon.run(), должен ждать, пока я не буду называть self.icon.stop()

Проблема в том, что, когда я нажимаю первый пункт меню («Уведомление о тестировании») - уведомление о тосте отображается правильно, но ПОСЛЕ того, как этот процесс выходит из цикла self.icon.run(), и программа завершает себя.

И я не понимаю, почему это так. Согласно документации self.icon.run() следует ждать до вызова stop ().

Я что-то не так делаю? Вот мой код:

from win10toast import ToastNotifier
from pystray import *
from PIL import Image

class SysTrayUI:
    def __init__(self):
        self.icon_path = "icon.png"

        self.menu_items = [
            MenuItem("Test Notification", lambda: toaster.show_toast("Test")),
            MenuItem("Exit", lambda: self.icon.stop()),
        ]
        self.menu = Menu(*self.menu_items)

        self.icon = Icon("Test Name", menu=self.menu)
        self.icon.icon = Image.open(self.icon_path)

        self.icon.run()

toaster = ToastNotifier()
app = SysTrayUI()

1 Ответ

0 голосов
/ 20 марта 2019

Нашли решение

toaster.show_toast Функция имеет параметр threaded, который позволяет запускать функцию в отдельном потоке

Итак, если вы напишите это так:

MenuItem("Test Notification", lambda: toaster.show_toast("Test", threaded=True)),

Тогда это не повлияет на выполнение self.icon.run()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...