2015-03-15 3 views

ответ

10

От documentation,

The get_pixbuf() method gets the gtk.gdk.Pixbuf being displayed by the gtk.Image . The return value may be None if no image data is set. If the storage type of the image is not either gtk.IMAGE_EMPTY or gtk.IMAGE_PIXBUF the ValueError exception will be raised.

(курсив мой)

Как вам нужен PNG файл, вы можете следовать инструкциям из here

pixbuf = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB,has_alpha=False, bits_per_sample=8, width=width, height=height) 
pixbuf.get_from_drawable(disp.pixmap, disp.pixmap.get_colormap(), 0, 0, 0, 0, width, height) 
pixbuf.save('path.png') 

Это создаст pixbuf от вашего pixmap которая disp.pixmap. Это можно сохранить позже, используя pixbuf.save

3

В ожидании ответа я на самом деле нашел решение

pixbuf = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, False, 8, width, height) 
pixbf = pixbuf.get_from_drawable(disp.pixmap, disp.pixmap.get_colormap(), 0, 0, 0, 0, width, height) 
pixbf.save('path.png') 

предполагая disp.pixmap это ваш объект пиксельного

4

В этих случаях полезно прочитать документацию непосредственно из самой Gtk, а не PyGtk, поскольку они более полные.

В этом случае соответствующие функции gtk_image_set_from_pixmap() и gtk_image_get_pixbuf():

Gets the GdkPixbuf being displayed by the GtkImage. The storage type of the image must be GTK_IMAGE_EMPTY or GTK_IMAGE_PIXBUF.

Проблема заключается в том, что GtkImage виджет может содержать одновременно GdkPixbuf, GdkPixmap, GdkImage ... но она не может конвертировать между ними, то есть вы можете восстановить только то, что вы сохранили.

Вы храните pixmap и пытаетесь получить pixbuf, и это не сработает. Теперь, каково решение? Это зависит от того, что вы пытаетесь сделать точно. Вероятно, этого достаточно, если вы преобразовали его в pixbuf с gtk.pixbuf.get_from_drawable():

w,h = disp.pixmap.get_size() 
pb = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, True, 8, w, h) 
pb.get_from_drawable(disp.pixmap, disp.pixmap.get_colormap(), 
    0, 0, 0, 0, width, height) 
pb.save('path.png')