2011-08-22 10 views
7

Ho appena iniziato con Python e scritto io stesso una bella, piccolo script che utilizza gnome-notifiche via pynotify, come questo:Come rimuovere una notifica pynotify obsoleta?

import pynotify 

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

Questa grande opera, ma la cosa è, quando ho eseguire lo script due volte in una fila ci vuole un po 'per la prima notifica di andare via. Il secondo viene mostrato dopo. Dal momento che il primo è obsoleto quando eseguo lo script per la seconda volta, voglio rimuovere il primo a livello di programmazione prima di mostrare il secondo (o sostituirlo). È possibile, e se lo è, come?

Un po 'di contesto per capire perché ho bisogno di questo: Dal momento che passo spesso il mouse da sinistra a destra e viceversa, voglio uno script che inverta solo questa preferenza e mi avvisa in una notifica " passato a "mancino" e "acceso a destrorso".

risposta

6

Ho cercato in giro per un po 'e sono giunto alla conclusione che è non possibile in questo caso.

È possibile utilizzare Notification.update() per aggiornare un oggetto di notifica esistente. Ma non puoi interrogare quelli esistenti dal sistema per modificarli o nasconderli. Potrebbe essere possibile memorizzare l'oggetto da qualche parte tramite la serializzazione e ripristinarlo per l'aggiornamento. Ma anche in questo caso è necessario conoscere la durata esatta della notifica e il timestamp al momento del lancio, poiché non c'è modo di verificare se una notifica è ancora visibile.

Un breve esempio su come utilizzare update(). Solo per riferimento, dal momento che il doc pynotify sembra quasi inesistente a me:

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

Dovete chiamare show() dopo l'aggiornamento. Altrimenti le modifiche non verranno visualizzate.

C'è anche una funzione close() nell'oggetto di notifica, ma che non fa nulla per me (su Linux/Gnome, può essere dipendente dal sistema).

Problemi correlati