Масштабирование изображения до размера родительской кнопки в GTK?

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

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

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

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

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


person Community    schedule 05.12.2009    source источник


Ответы (2)


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

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

person anthony    schedule 09.12.2009

person    schedule
comment
Кажется, это совсем не то, что я хочу - писать файл изображения каждый раз, когда пользователь изменяет размер окна, нехорошо. Кроме того, это не сильно отличается от использования pixbuf_new_from_file_at_size. - person ; 15.12.2009
comment
Ооо, спасибо за этот совет, я не знал о pixbuf_new_from_file_at_size. - person Scott Kirkwood; 16.12.2009