首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在吐司通知程序离开Tray图标循环之后

在吐司通知程序离开Tray图标循环之后
EN

Stack Overflow用户
提问于 2019-03-20 03:01:07
回答 2查看 692关注 0票数 1

我正在尝试构建简单的Python应用程序,它将向Tray添加图标。我还添加了两个菜单项目到这个托盘图标,一个显示Windows 10吐司信息,另一个停止应用程序。

程序启动正确,图标出现,菜单也出现。所以,我使用self.icon.run()运行的进程应该等待,直到我不调用self.icon.stop()

问题是,当我按下第一个菜单项(“测试通知”)时,会正确地显示吐司通知,但是在这个过程退出self.icon.run()循环之后,程序就完成了自己的工作。

我不明白为何会这样。根据文档,self.icon.run()应该等待直到停止()调用。

我是不是做错了什么?这是我的代码:

代码语言:javascript
复制
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()
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-20 03:40:25

找到解决办法

toaster.show_toast函数具有threaded参数,允许在单独的线程中启动函数。

所以,如果你这样写的话:

代码语言:javascript
复制
MenuItem("Test Notification", lambda: toaster.show_toast("Test", threaded=True)),

这样就不会影响self.icon.run()的执行。

票数 0
EN

Stack Overflow用户

发布于 2020-09-14 08:36:12

= True

这将有所帮助,更好的做法是创建一个单独的函数,并传递如下所示的消息(这对我是有效的)。当我做同样的事情而不创建一个函数的时候,它对我不起作用。因此,请遵循以下格式

代码语言:javascript
复制
def notify(msg):
    n = ToastNotifier()
    n.show_toast("Champzz", msg, duration= 10, threaded=True)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55252929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档