Как удалить устаревшее уведомление pynotify? - PullRequest
7 голосов
/ 22 августа 2011

Я только начал с python и написал себе красивый маленький скрипт, который использует gnome-уведомления через pynotify, например:

import pynotify

pynotify.init("Application") 
alert = pynotify.Notification("Title", "Description") 
alert.show();

Это прекрасно работает, но дело в том, что когда я выполняю сценарий два раза подряд, требуется некоторое время, чтобы исчезло первое уведомление. Второй показывается после этого. Поскольку первый из них устарел, когда я выполняю сценарий во второй раз, я хочу удалить первый программно, прежде чем показывать второй (или заменить его). Возможно ли это, и если да, то как?

Немного контекста, чтобы понять, зачем мне это нужно: поскольку я часто переключаю свою мышь с левой на правую и наоборот, я хочу, чтобы скрипт, который просто инвертировал это предпочтение и сообщал мне в уведомлении "переключен для левшей »и« переключен на правшей ».

1 Ответ

6 голосов
/ 26 августа 2011

Я некоторое время искал и пришел к выводу, что невозможно в этом случае.

Вы можете использовать Notification.update() для обновления существующего объекта уведомления. Но вы не можете запросить существующие из системы, чтобы изменить или скрыть их. Может быть возможно сохранить объект где-нибудь через сериализацию и восстановить его для обновления. Но даже в этом случае вам все равно нужно знать точную продолжительность уведомления и отметку времени, когда вы его запустили, поскольку нет способа проверить, видимо ли еще уведомление.

Краткий пример использования update(). Просто для справки, так как документ pynotify для меня почти не существует:

#!/usr/bin/env python

import pynotify

pynotify.init("MyApplication")

a = pynotify.Notification("Test notification", "Lorem ipsum op")
a.show()
raw_input("Press return to update the notification")
a.update("Updated notification", "Ipsum lorem still op")
a.show()

Вы должны позвонить show() после обновления. В противном случае изменения не будут отображены.

В объекте Notification есть также функция close (), но она ничего не делает для меня (в Linux / Gnome может зависеть от системы).

...