gtk StatusIcon
From time to time, I have found a need for limited communication with an otherwise background process. A tray icon serves this purpose well. Instead of dynamically generated SVG, you certainly can use Cairo or static files. Tooltips, blinking, callbacks, and menus are also possibilities.
# enable cron
import os
if not 'DISPLAY' in os.environ:
os.environ['DISPLAY']=':0.0'
if not 'HOME' in os.environ:
os.environ['HOME']=os.path.expanduser('~'+os.getlogin())
import gtk
icon = gtk.StatusIcon()
def set_image(color):
import rsvg
image = """
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
<path d="M42,95L50,30L58,95Z" fill="%s" stroke="none"/>
<path d="M39,20a15,15 0,0,0 0,20 M28,10a30,30 0,0,0 0,40
M61,20a15,15 0,0,1 0,20 M72,10a30,30 0,0,1 0,40" stroke="%s"
fill="none" stroke-width="5" stroke-linecap="round"/>
</svg>
"""
handle=rsvg.Handle()
handle.write(image % (color,color))
handle.close()
try:
gtk.gdk.threads_enter()
icon.set_from_pixbuf(handle.get_pixbuf())
finally:
gtk.gdk.threads_leave()
# spin GTK off in a background thread
import threading
gtk.gdk.threads_init()
class gtkmain(threading.Thread):
def run(self):
gtk.main()
gtkmain().start()
# user logic
import time
set_image('red')
time.sleep(3)
set_image('yellow')
time.sleep(3)
set_image('green')
time.sleep(3)
gtk.main_quit()