Desktop Widget
#!/usr/bin/env python
#
# [SNIPPET_NAME: Desktop Widget]
# [SNIPPET_CATEGORIES: PyGTK, Cairo]
# [SNIPPET_DESCRIPTION: Standalone desktop widget with transparent background]
# [SNIPPET_AUTHOR: Siegfried-Angel Gevatter Pujals <[email protected]>]
# [SNIPPET_LICENSE: GPL]
# For more information, see:
# http://bloc.eurion.net/archives/2009/standalone-pygtk-desktop-widgets/
import gtk
import cairo
def transparent_expose(widget, event):
""" Make the given widget transparent. """
cr = widget.window.cairo_create()
cr.set_operator(cairo.OPERATOR_CLEAR)
region = gtk.gdk.region_rectangle(event.area)
cr.region(region)
cr.fill()
return False
class DesktopWindow(gtk.Window):
""" A transparent and borderless window, fixed on the desktop."""
# Based upon the composited window example from:
# http://www.pygtk.org/docs/pygtk/class-gdkwindow.html
def __init__(self, *args):
gtk.Window.__init__(self, *args)
self.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DOCK)
self.set_keep_below(True)
self.set_decorated(False)
self.stick()
screen = self.get_screen()
rgba = screen.get_rgba_colormap()
self.set_colormap(rgba)
self.set_app_paintable(True)
self.connect("expose-event", transparent_expose)
class QuoteWidget:
""" An example widget, which shows a quote embedded into your desktop."""
def __init__(self):
self.window = DesktopWindow()
self.window.move(500, 100)
self.box = gtk.HBox()
self.window.add(self.box)
self.label = gtk.Label()
self.box.pack_start(self.label, expand=True)
quote = "If they give you ruled paper write the other way."
author = "Juan Ramon Jimenez"
self.label.set_text("%s\n\t\t-- %s" % (quote, author))
self.window.show_all()
if __name__ == "__main__":
print "Look at your desktop! :)"
instance = QuoteWidget()
gtk.main()