我正在尝试构建简单的Python应用程序,它将向Tray添加图标。我还添加了两个菜单项目到这个托盘图标,一个显示Windows 10吐司信息,另一个停止应用程序。
程序启动正确,图标出现,菜单也出现。所以,我使用self.icon.run()运行的进程应该等待,直到我不调用self.icon.stop()
问题是,当我按下第一个菜单项(“测试通知”)时,会正确地显示吐司通知,但是在这个过程退出self.icon.run()循环之后,程序就完成了自己的工作。
我不明白为何会这样。根据文档,self.icon.run()应该等待直到停止()调用。
我是不是做错了什么?这是我的代码:
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()发布于 2019-03-20 03:40:25
找到解决办法
toaster.show_toast函数具有threaded参数,允许在单独的线程中启动函数。
所以,如果你这样写的话:
MenuItem("Test Notification", lambda: toaster.show_toast("Test", threaded=True)),这样就不会影响self.icon.run()的执行。
发布于 2020-09-14 08:36:12
= True
这将有所帮助,更好的做法是创建一个单独的函数,并传递如下所示的消息(这对我是有效的)。当我做同样的事情而不创建一个函数的时候,它对我不起作用。因此,请遵循以下格式
def notify(msg):
n = ToastNotifier()
n.show_toast("Champzz", msg, duration= 10, threaded=True)https://stackoverflow.com/questions/55252929
复制相似问题