【问题标题】:Updating notification using KNotify使用 KNotify 更新通知
【发布时间】:2011-05-05 16:44:57
【问题描述】:

我已将一个 gnome python 脚本转换为在 Spotify 每次更改曲目时使用 KDE 通知。代码如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
Title: Spotify Notification Demo
Author: Stuart Colville, http://muffinresearch.co.uk
Modified to work with KDE: Steve Nixon
License: BSD

"""

import dbus
import gobject
from dbus.mainloop.glib import DBusGMainLoop

class SpotifyNotifier(object):

    def __init__(self):
        """initialise."""
        bus_loop = DBusGMainLoop(set_as_default=True)
        bus = dbus.SessionBus(mainloop=bus_loop)
        loop = gobject.MainLoop()
        self.spotify = bus.get_object("org.mpris.spotify", "/")
        self.spotify.connect_to_signal("TrackChange", self.track_changed)
        self.notify_id = None
        loop.run()

    def track_changed(self, metadata):
        """Handle track changes."""
        if metadata:

                title = unicode(metadata.get("title").encode("latin-1"), "utf-8")
                album = unicode(metadata.get("album").encode("latin-1"), "utf-8")
                artist = unicode(metadata.get("artist").encode("latin-1"), "utf-8")

                knotify = dbus.SessionBus().get_object("org.kde.knotify", "/Notify")

                knotify.event("warning", "kde", [], title, u"by %s from %s" % (artist, album), [], [], 0, 0, dbus_interface="org.kde.KNotify")

if __name__ == "__main__":
    SpotifyNotifier()

这对每个通知都有效,但会无限期地保留 KNotify 区域中的条目。

我也可以

a) 使用 ID 和knotify.update 更新事件?我假设是这样,但我不知道如何检查事件的初始存在以第一次使用knotify.event 并为每个后续使用knotify.update。

b) 30 秒(左右)后关闭事件

c) 在歌曲结束时关闭事件(比选项 b 更好),但会出现相同的跟踪 ID 问题,我还没有弄清楚该怎么做)

为任何帮助干杯,

哦,还有,如果有人知道如何阻止它在通知它时发出一点“钢琴”噪音,那就太好了!

史蒂夫

【问题讨论】:

    标签: python notifications kde


    【解决方案1】:

    更简单的方法是在创建通知事件时设置超时:

    knotify.event(event, fromApp, contexts, title, text, pixmap, actions, timeout, winId)
    

    timeout 是一个整数值,表示毫秒。

    【讨论】:

      【解决方案2】:

      event 方法返回 int。那是通知的ID。因此,您可以使用它来关闭、更新现有的通知:

      id = knotify.event("warning", ....)
      
      time.sleep(30) 
      
      knotify.closeNotification(id)
      

      如果你必须检查它是否已经存在,你可以将Id写入tmp文件,等等

      【讨论】:

        猜你喜欢
        • 2018-04-29
        • 2014-05-12
        • 1970-01-01
        • 2018-08-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-25
        相关资源
        最近更新 更多