2011-08-22 8 views
7

acabo de empezar con Python y escribió a mí mismo un pequeño script agradable, que utiliza gnome-notificaciones a través de pynotify, así:¿Cómo eliminar una notificación pynotify obsoleta?

import pynotify 

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

Esto funciona muy bien, pero la cosa es, cuando ejecuto el guión dos veces en una fila tarda un tiempo en desaparecer la primera notificación. El segundo se muestra después de eso. Dado que el primero es obsoleto cuando ejecuto el script por segunda vez, quiero eliminar el primero mediante programación antes de mostrar el segundo (o reemplazarlo). ¿Es esto posible, y si lo es, cómo?

Un poco de contexto para entender por qué necesito esto: dado que a menudo cambio el mouse de izquierda a derecha y viceversa, quiero un script que simplemente invierta esta preferencia y me avise en una notificación " cambió a "zurdo" y "cambió a diestro".

Respuesta

6

He buscado por un tiempo y he llegado a la conclusión de que es imposible en este caso.

Puede usar Notification.update() para actualizar un objeto de notificación existente. Pero no puede consultar las existentes del sistema para modificarlas u ocultarlas. Es posible almacenar el objeto en algún lugar a través de serialización y restaurarlo para actualizar. Pero incluso entonces, aún debe saber la duración exacta de la notificación y la marca de tiempo cuando la lanzó, ya que no hay forma de comprobar si todavía se puede ver una notificación.

Una muestra corta de cómo usar update(). Sólo como referencia, ya que el doc pynotify parece casi inexistente a mí:

#!/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() 

Tienes que llamar show() después de la actualización. De lo contrario, los cambios no se mostrarán.

También hay una función close() en el objeto Notificación, pero eso no hace nada por mí (en Linux/Gnome, puede depender del sistema).

Cuestiones relacionadas