python GTK3 Изображение из формата PIL jpg - PullRequest
0 голосов
/ 03 июля 2018

Я пытаюсь открыть изображение (jpg) из буфера (получить как BLOB-объект из базы данных Oracle) как Gtk.Image () и добавить его в окно Gtk, но я получаю сообщение об ошибке "Ожидается Gtk.Widget, но получено PIL.JpegImagePlugin.JpegImageFile». Я могу показать изображение с помощью show (), я могу открыть файл jpeg window.add из пути на диске, а затем показать окно, но когда я пытаюсь добавить jpg из буфера, я получаю ошибку. Вот что я произвел:

my_source=Here_I_get_BLOB_img_from_database()
newimage=Gtk.Image()
newimage=my_source.read()
image=io.BytesIO(newimage)
dt=Image.open(image)
newwindow = Gtk.Window(modal=True)

На данный момент у меня есть jpg в буфере, и я могу сделать:

dt.show() # to display the image in system imageviewer

Или сохраните dt как jpg, или добавьте в новое окно результат image.set_from_file («путь с расширением jpg»), но не знаете, как это сделать:

newwindow.add(dt) 

Или что-нибудь с подобным эффектом. Как это сделать самым простым способом?

1 Ответ

0 голосов
/ 04 июля 2018

То, что сработало для меня, было -

Gtk. Изображение для загрузки img из буфера содержит объект Pixbuf, который, например, можно загрузить из потока. Итак:

from gi.repository import (...) GdkPixbuf, GLib, Gio
(...)
my_source=Here_I_get_BLOB_img_from_database()
newimage=my_source.read()
glib=GLib.Bytes.new(newimage)
stream = Gio.MemoryInputStream.new_from_bytes(glib)
pixbuf = GdkPixbuf.Pixbuf.new_from_stream(stream, None)
image=Gtk.Image().new_from_pixbuf(pixbuf)
my_window = Gtk.Window(modal=True, title="Image")
my_window.add(image)
image.show()
my_window.show()
...