如何在gtk.DrawingArea上绘制图像?

2 投票
1 回答
6426 浏览
提问于 2025-04-17 07:08

我正在写一个基于PyGtk的绘画程序,参考了这个基本教程:这里.

有没有办法在绘图区域添加一张图片,这样我就可以在图片上面继续绘画?就像一个印章,或者导入的照片。例如,我试过添加一个gtk.Image(),但是gtk.DrawingArea这个对象没有add这个属性。

self.window = gtk.Window((gtk.WINDOW_TOPLEVEL))
self.window.set_title ("Canvas")
self.window.set_position(gtk.WIN_POS_CENTER)
hbox = gtk.HBox(False, 0)
self.window.add(hbox)
self.window.set_resizable(False)

# Create the drawing area
drawing_area = gtk.DrawingArea()
drawing_area.set_size_request(screenWidth-350, screenHeight-100)
hbox.pack_start(drawing_area, True, True, 0)
drawing_area.show()

1 个回答

4

你需要自己把图像(用的是 gtk.gdk.Pixbuf,而不是 gtk.Image)画到背景的图像上,方法是使用 gtk.gdk.Drawable.draw_pixbuf()。只有容器小部件(可以包含其他小部件的小部件)才有 add() 方法,而 gtk.DrawingArea 不是这样的。

pixbuf = gtk.gdk.pixbuf_new_from_file(image_filename) #one way to load a pixbuf
pixmap.draw_pixbuf(None, pixbuf, 0, 0, x, y, -1, -1, gtk.gdk.RGB_DITHER_NONE, 0, 0)

撰写回答