Python 跨平台桌面通知器

46 投票
8 回答
23739 浏览
提问于 2025-04-15 19:07

我在寻找一个像Growl那样的、可以在Windows上显示气泡提示的通知库,最好是用Python写的。想象一下,如果我能写出这样的代码:

>>> import desktopnotifier as dn
>>> dn.notify('Title', 'Long description goes here')

这样就可以在Mac、Windows和Linux上显示相应的提示信息。请问有没有这样的库?如果没有,我该如何自己写一个呢?

  • Mac系统自带通知工具吗?我需要单独安装Growl吗?
  • 在Windows上,我想这可能需要用到pywin32吧?
  • 在Linux上,如果我用的是GNOME,有没有GNOME的API(使用gnome-python)可以做到这一点?
  • 我能让通知在所有平台上都“固定”显示吗(也就是说,不会消失)?

更新:我希望这个任务不需要依赖像PyQT4和wxPython这样庞大的图形界面框架。

8 个回答

7
  • 怎么开始写这个

    看看 keyring 是怎么处理跨平台问题的(这是一个Python库,可以自动连接到不同的密码管理工具来存储信息)

  • Growl 并不是和 OSX 一起打包的,你需要单独安装它,OSX 本身没有内置的通知系统。

  • 对于 Unix 系统,你可能想要使用 DBus(之前提到过的),作为备用方案,注意在 OSX 上也可能有 dbus,但 KDE 和 Gnome 都有类似 Growl 的库。分别是 KDE 的 KNotification 和 Gnome 的 libnotify。

  • 对于 Windows,可以看看 Snarl,如果没有的话就退而求其次用通知气泡(可以用类似 ToasterBox 的东西)

绝对不要想要让通知变得粘性。这是个愚蠢的想法,既不体贴又让人烦。正因为有像你这样的人,这种功能在大多数通知系统中都没有被提供。

最后,即使这些没有 Python 库,你也可以使用 ctypes 来访问它们。

17

在2010年的Pycon大会上,有一个关于跨平台Python开发的演讲。当时还有一个关于这个主题的网页,里面有一些关于跨平台通知的建议。不过我现在找不到那个网页了,但我保存了一份本地副本,这里是关于通知的部分:

有时候,你的应用程序需要通知用户一些事情:比如软件更新可用了,收到了新的即时消息,或者300页的打印任务终于完成了等等。

  • 为了让通知在不同平台上都能顺利使用,最好不要让它们需要用户互动。例如,Ubuntu不支持需要用户操作的通知。

  • 以下是一些最重要的库:

    o Linux: pynotify

    o Mac OS X: 通常会安装一个叫Growl的工具,它不是标准的。

    o Windows: 一个不错的wxPython解决方案是ToasterBox,它模仿了Firefox或Thunderbird的通知样式。

  • 为了Phatch项目,我们开发了一个库,可以将这三种系统统一到一个API中:phatch/lib/notify.py

这个链接的Python文件非常有趣,我觉得你几乎可以直接使用它。代码也很清晰,所以你很快就能明白它的功能。

基本的思路是,它会检测可用的通知系统,几乎不管是什么平台,然后按照一定的顺序尝试使用这些系统,如果有必要的话,会退回到更简单的系统。这样,如果用户安装了Growl,它就会使用这个工具,不管是什么平台。

你也可以根据需要调整它,以支持其他通知系统,而不仅仅是上面提到的这三种。

19

这是我几年前用wxPython写的一个桌面通知工具,你可以在这里找到它。这个工具在Windows和Linux上表现一样,应该也能在OSX上运行。它包含一个线程事件循环,可以用来让通知窗口里的图标和消息动起来,用户可以点击它。虽然可能需要做一些小调整来适应你的需求,但基本的框架已经搭好了。

撰写回答