2011-11-27 88 views
2

我正在写一个PyGtk绘图程序,基于发现的基本教程here将图像绘制到gtk.DrawingArea?

有没有办法将图像添加到绘图区域,以便您仍然可以在图像上绘制图像?例如像邮票或导入的照片。我试过添加一个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() 

回答

4

你有自己的pixmap使用gtk.gdk.Drawable.draw_pixbuf()绘制图像(为gtk.gdk.Pixbuf,不gtk.Image)在背衬上。只有容器小部件(可以包含其他小部件的小部件)具有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) 
+0

thanks!这工作完美。还有一个问题 - 我试图通过循环(重放函数)修改pixbuf来在pixmap上绘制一系列图像。我希望它显示每个像素图的连续变化,但由于某种原因,它只显示最后一个图像加载... – Claire

+0

'我在xrange(1,stepCount): loadFile ='temp \ step'+ str(i )+ 'png格式' PIXBUF = gtk.gdk.pixbuf_new_from_file(的loadFile) #refresh窗口 hbox.remove(self.drawing_area) hbox.add(self.drawing_area) time.sleep(0.5) 打印“临时\ step'+ str(i)+'.png'' – Claire

+0

如果您有其他问题,最好打开一个新问题 - 更多人会看到它,并且您更有可能得到答案。 – ptomato