Вот фактический исходный код, чтобы сделать это. Я просто хотел заштриховать весь pixbuf, но чтобы создать фигуру, вам нужно использовать соответствующие методы пути:
def getBlendedPixbuf(pixbuf, (r,g,b,a)):
"""Turn a pixbuf into a blended version of the pixbuf by drawing a
transparent alpha blend on it."""
pixbuf = pixbuf.copy()
#convert pixbuf to Drawable:
visual = gtk.gdk.visual_get_best()
screen = visual.get_screen()
cmap = screen.get_default_colormap()
w,h = pixbuf.get_width(), pixbuf.get_height()
drawable = gtk.gdk.Pixmap(
None, w, h, visual.depth)
gc = drawable.new_gc()
drawable.draw_pixbuf(
gc, pixbuf, 0,0,0,0,-1,-1)
#do all the drawing on it
cc = drawable.cairo_create()
cc.set_source_rgba(r,g,b,a)
cc.paint()
#put it back into a pixbhf
pixbuf.get_from_drawable(
drawable,cmap,0,0,0,0,w,h)
return pixbuf