Проверка размера объекта Gtk.Image в Python 3 и GTK 3

У меня есть приложение, которое должно отображать изображение объекта в окне Gtk, но я хотел бы, чтобы размер окна соответствовал размеру изображения. По сути что-то вроде:

. . .
image = Gtk.Image.new_from_file(filename)
width, height = image_dimension(image)
window.set_size_request(width, height)
. . .

Что мне нужно, так это возможность, подобная функции «image_dimension» выше. К сожалению, для Python 3 нет PIL (библиотеки изображений Python), которую было бы очень просто использовать.

Боюсь, я начинающий программист и не хочу заниматься разбором заголовков (например, файла jpg) отчасти потому, что я хотел бы, чтобы он работал с любым файлом.

Спасибо,

Нарни


person narnie    schedule 27.12.2012    source источник


Ответы (1)


Используйте GdkPixbuf.Pixbuf для загрузки файла изображения. Это позволяет вам получить высоту и ширину, а также многие другие свойства изображения. Затем создайте виджет изображения с помощью Gtk.Image.new_from_pixbuf().

person ptomato    schedule 28.12.2012
comment
Я читал, что GkdPixbuf может загружать только 8-битные изображения, это правда? Определяет ли GdkPixbuf.Pixbuf тип изображения? Я потратил много времени, пытаясь понять GdkPixbuf.Pixbuf, но просто не смог найти каких-либо четких примеров, особенно для python (и я рассмотрел несколько примеров из c, но я не программист ac, поэтому было трудно перевести на питон). Любые учебники для этого? Кроме того, есть ли способ связать данные изображения в переменной с GdkPixbuf.Pixbuf? Если да, то как? Я проверил Devhelp, в котором есть GDK3, и нашел только Pixbuf, в котором есть только методы get_from_window и get_from_surface. Спасибо :) - person narnie; 03.01.2013
comment
Я нашел под информацией в документах GDK3 ссылку на API GdkPixBuf, который я погуглил и нашел метод new_from_data, но сначала вам нужно знать высоту и ширину, чего я не знаю (если сначала не сохранить в файл, а затем перезагрузить , что собственно я и пытался сделать в первую очередь. - person narnie; 03.01.2013
comment
Но если вы загружаете его из файла, то вам не нужно знать высоту и ширину. - person ptomato; 03.01.2013
comment
Да, это обходной путь, который я использую в настоящее время, но я хотел бы загрузить изображение из Интернета в переменную и показать изображение в окне, не сохраняя его сначала из переменной (я использую Mapquest static и API направлений), затем перезагрузите его, что кажется пустой тратой ресурсов и хакерством. - person narnie; 14.01.2013
comment
Ага. Но изображение в переменной не является необработанными данными, не так ли? Это в определенном формате? - person ptomato; 14.01.2013