Python 使用Gtk和pycairo在图像顶部绘制形状

Python 使用Gtk和pycairo在图像顶部绘制形状,python,gtk,cairo,Python,Gtk,Cairo,我最近开始使用glade、python gtk+和cairo来构建GUI应用程序。我已经构建了一个DrawingArea小部件,其中我使用了pixbuf来绘制图像。但是,当我尝试在图像上绘制形状时,形状会在图像后面绘制 def on_draw(self, wid, cr): #cr.rectangle(1500, 300, 400, 800) #cr.stroke() self.pb = GdkPixbuf.Pixbuf.new_from_file_at_scale("i

我最近开始使用glade、python gtk+和cairo来构建GUI应用程序。我已经构建了一个DrawingArea小部件,其中我使用了pixbuf来绘制图像。但是,当我尝试在图像上绘制形状时,形状会在图像后面绘制

def on_draw(self, wid, cr):
    #cr.rectangle(1500, 300, 400, 800)
    #cr.stroke()
    self.pb = GdkPixbuf.Pixbuf.new_from_file_at_scale("image2.jpg", 1920, 1080, True)
    Gdk.cairo_set_source_pixbuf(cr, self.pb, 0, 0)
    cr.paint()
有没有办法把形状放在图片的顶部


抱歉问了这么愚蠢的问题。我对这一点还不熟悉。

你为什么不在图像的上面而不是后面画形状呢

因此,与其先画形状,然后再画图像,不如用另一种方法。首先画图像,然后画形状

def on_draw(self, wid, cr):
    self.pb = GdkPixbuf.Pixbuf.new_from_file_at_scale("image2.jpg", 1920, 1080, True)
    Gdk.cairo_set_source_pixbuf(cr, self.pb, 0, 0)
    cr.paint()
    cr.set_source_rgb(0, 0, 0)
    cr.rectangle(1500, 300, 400, 800)
    cr.stroke()

对不起,但这似乎对我不起作用。还有别的解决办法吗?哦,对了。必须切换回黑色源。我编辑了我的答案。