Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用KNotify更新通知_Python_Notifications_Kde - Fatal编程技术网

Python 使用KNotify更新通知

Python 使用KNotify更新通知,python,notifications,kde,Python,Notifications,Kde,我已经将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 """ impor

我已经将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的相同问题,我还没有弄清楚如何做)

为任何帮助干杯

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


Steve

事件方法返回int。这是通知的Id。因此,您可以使用它关闭、更新现有通知:

id = knotify.event("warning", ....)

time.sleep(30) 

knotify.closeNotification(id)

如果您必须检查它是否已经存在,您可以将Id写入tmp文件,以此类推,

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

knotify.event(event, fromApp, contexts, title, text, pixmap, actions, timeout, winId)
超时是一个表示毫秒的整数值