Ogni tanto trovo un minuto per migliorare il mio progetto planimo ed imparo qualcosa di nuovo su python e le varie estensioni. In un prossimo post vi annuncerò le grandi novità del progetto ma per ora vi voglio presentare un metodo semplice per far apparire le notifiche sul nostro desktop (solo unixes, no Windows). La notifica sarà simile a questa:
La notifica apparirà in basso a destra sul desktop per un periodo di tempo impostabile.
Dbus è un sistema per la comunicazione tra processi. In pratica si sfrutterà dbus per comunicare con il demone delle notifiche.
Il codice python
import dbus
ICON = "file:///home/redgun/python/planimo/data/icons/planimo48.png"
class Notifier:
def __init__(self):
self.session_bus = dbus.SessionBus()
obj = self.session_bus.get_object("org.freedesktop.Notifications",
"/org/freedesktop/Notifications")
self.notif = dbus.Interface(obj, "org.freedesktop.Notifications")
def notify(self, title, message, iconfile = ICON, time = 3000):
try:
self.notif.Notify("Notification",
dbus.UInt32(0), iconfile, title, message,
[], [], dbus.Int32(time), dbus.UInt32(0))
except:
try:
self.notif.Notify("Notification",
dbus.UInt32(0), iconfile, title, message,
[], [], dbus.Int32(time))
except Exception, detail:
print detail
if __name__ == "__main__":
n = Notifier()
n.notify("Titolo", "messaggio stile bold", time=5000)
Per far funzionare questo codice è necessario che il pacchetto python-dbus sia installato sul vostro sistema (Ubuntu lo installa per default). Il metodo notify prova ad invocare il metodo self.notif.Notify in due modi diversi a causa di una modifica delle api della libnotify (vedi qui per maggiori info). Il primo metodo infatti funziona su Ubuntu Edgy, il secondo sulla Feisty. Il parametro time server per impostare la durata in millisecondi della notifica.
Hao, inanzitutto complimenti per il tuo blog e per le notizie che dai :)
RispondiEliminacmq riguardo questo script in python andando ad eseguirlo mi da questo errore:
-------
Traceback (most recent call last):
File "dbus.py", line 26, in ?
n = Notifier()
File "dbus.py", line 7, in __init__
self.session_bus = dbus.SessionBus()
AttributeError: 'module' object has no attribute 'SessionBus'
da cosa può dipendere
Grazie per i complimenti
RispondiEliminaProbabilmente dipende dal fatto che hai chiamato il file dbus.py. Prova a dargli un altro nome ed assicurati che nella stessa directory non esista un file dbus.pyc
Io uso Ubuntu Edgy è funziona correttamente. L'ho testato anche su Feisty
Grazie era proprio quello
RispondiEliminail problema, ma pensa te
a volte la soluzione più semplice
e quella più probabile
:)
grazie ancora
di nulla ;)
RispondiEliminaC'e' un modo per mettere un bottone sul "fumetto" di notifica?
RispondiElimina@AS
RispondiEliminaGrazie per il commento, è stato l'ispirazione per un nuovo post dove spiego come fare ciò che chiedi. Puoi leggerlo qui