我正在尝试构建简单的Python应用程序,它将向Tray添加图标。 我还在此任务栏图标上添加了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()
答案 0 :(得分:1)
这将有所帮助,更好的方法是创建一个单独的函数并传递如下所示的消息(这对我有用)。如果我不创建函数就进行同样的操作对我来说是行不通的。因此,请遵循以下格式
def notify(msg):
n = ToastNotifier()
n.show_toast("Champzz", msg, duration= 10, threaded=True)
答案 1 :(得分:0)
找到了解决方案
toaster.show_toast
函数具有threaded
参数,该参数允许在单独的线程中启动函数
因此,如果您这样编写:
MenuItem("Test Notification", lambda: toaster.show_toast("Test", threaded=True)),
这将不会影响self.icon.run()