Масштабировать изображение до размера родительской кнопки в GTK?
У меня есть компоновка GTK с виджетом слева от HBox, определяющим максимальную высоту, и VBox справа с тремя кнопками, каждая из которых содержит только изображение и текст. Изображения являются значком GTK и имеют тип хранилища.
Используя expand=True, fill=True, упаковка кнопок без изображений - это именно та высота, которую я хочу, - произвольная малая ширина и 1/3 каждой высоты левой половины HBox. Однако с изображением они либо слишком высоки - 3 * ICON_SIZE_MENU слишком высоки во многих темах - либо, если я форсирую запрос высоты кнопки, они обрезаются. Я бы предпочел масштабировать их до размера родительской кнопки.
Нужно ли делать свои собственные pixbuf для каждой используемой иконки (и регенерировать их при изменении размера)? Или GTK может автоматически изменять размер изображения, чтобы соответствовать кнопке, а не наоборот? Поскольку в каждой теме, которую я пробовал, изображения находятся на расстоянии всего лишь нескольких пикселей, можно ли отключить обрезку кнопки?
Это приложение написано на Python с использованием PyGTK, но решения на любом языке приветствуются.
(Я попытался просто сделать его типом хранения имени значка, но одним из значков является REVERT_TO_SAVED, который превратился в ломаное изображение, когда я попытался принудительно установить его на определенную высоту пикселя. Кроме того, я бы предпочел не применять его к каким-либо фиксированная высота пикселя.)
2 ответа
Там нет никакого способа автоматически вы хотите, что вы хотите. Возможно, вы захотите создать подкласс gtk.Image и в своем подклассе масштабировать pixbuf до размера выделения вашего виджета. Преимущество этого заключается в том, что у вас будет многократно используемый виджет, и вы сможете изменять размер изображения на лету.
Недостатком является то, что у вас будет некрасивое увеличенное изображение. Вы можете изучить масштабируемую векторную графику.
Мне повезло с использованием файлов SVG и их масштабированием, так как легко включить SVG в программы pyGtk.
img = gtk.gdk.pixbuf_new_from_file(fname)
Я копирую svg во временный файл и изменяю первый '
Затем я прочитал, что изменил svg, и он будет загружен как pixbuf, масштабированный и со всеми достоинствами альфа-канала.
см. http://code.google.com/p/key-mon/source/browse/src/keymon/lazy_pixbuf_creator.py