Масштабировать изображение до размера родительской кнопки в GTK? - PullRequest
2 голосов
/ 05 декабря 2009

У меня есть компоновка GTK с виджетом слева от HBox, определяющего максимальную высоту, которую я хочу, и VBox справа, содержащий три кнопки, каждая из которых содержит только изображение и без текста. Изображения являются значком GTK и имеют тип хранилища.

Используя команду развернуть = Истина, заполнить = Истина, упаковка кнопок без изображений - это именно та высота, которую я хочу, - произвольная малая ширина, и 1/3 каждая высота левой половины HBox. Однако с изображением они либо слишком высоки - 3 * ICON_SIZE_MENU слишком высоки во многих темах - либо, если я форсирую запрос высоты кнопки, они обрезаются. Я бы предпочел масштабировать их до размера родительской кнопки.

Нужно ли мне создавать свои собственные pixbuf для каждой иконки, которую я использую (и регенерировать их при изменении размера)? Или GTK может автоматически изменять размер изображения, чтобы соответствовать кнопке, а не наоборот? Поскольку в каждой теме, которую я пробовал, изображения находятся на расстоянии всего лишь нескольких пикселей, можно ли отключить обрезку кнопки?

Это приложение написано на Python с использованием PyGTK, но приветствуются решения на любом языке.

(Я попытался просто сделать его типом хранения имени значка, но один из значков - REVERT_TO_SAVED, который превратился в изображение с ломаной картинкой, когда я попытался принудительно установить его на определенную высоту пикселя. Кроме того, я бы предпочел не применять силу это к любой фиксированной высоте пикселя.

Ответы [ 2 ]

2 голосов
/ 09 декабря 2009

Там нет никакого способа автоматически вы хотите, что вы хотите. Возможно, вы захотите создать подкласс gtk.Image и в своем подклассе масштабировать pixbuf до размера выделения вашего виджета. Преимущество этого заключается в том, что у вас будет многократно используемый виджет, и вы сможете изменить его размер на лету.

Недостатком является то, что у вас будет некрасивое увеличенное растровое изображение. Возможно, вы захотите взглянуть на масштабируемую векторную графику.

1 голос
/ 13 декабря 2009

Мне повезло с использованием файлов SVG и их масштабированием, поскольку SVG легко включать в программы pyGtk.

img = gtk.gdk.pixbuf_new_from_file(fname)

Я копирую svg во временный файл и изменяю первый '

Затем я прочитал i, что изменил svg, и он будет загружен в виде pixbuf, масштабированного и со всеми достоинствами альфа-канала.

см. http://code.google.com/p/key-mon/source/browse/src/keymon/lazy_pixbuf_creator.py

...