2011-11-27 122 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