Как разрешить масштабирование с одинаковым соотношением сторон в (Py) Qt?

StackOverflow https://stackoverflow.com/questions/1631574

Вопрос

Если у вас есть QImage, обернутый в QLabel, возможно ли увеличить его или уменьшить при изменении размера окна и сохранении соотношения сторон (чтобы изображение не искажалось)? Я понял, что он может масштабироваться с помощью setScaledContents (), и вы можете установить минимальный и максимальный размер, но изображение все равно теряет свой аспект.

Было бы здорово, если бы это можно было объяснить с помощью Python (так как я не знаю c ++), но я возьму то, что смогу получить. : -)

Заранее спасибо!

Это было полезно?

Решение

Я показываю это как C ++, в котором находится документация, на которую я смотрю. Не должно быть слишком сложно конвертировать в python.

Вам необходимо создать пользовательскую производную от QLayoutItem , которая переопределяет bool hasHeightForWidth () и int heightForWidth (int width) , чтобы сохранить соотношение сторон как-то. Вы можете либо передать изображение и запросить его, либо просто установить соотношение напрямую. Вам также необходимо убедиться, что функция widget () возвращает указатель на соответствующую метку.

Как только это будет сделано, вы можете добавить элемент макета в макет так же, как в виджете. Поэтому, когда ваш ярлык будет добавлен, измените его, чтобы использовать свой класс элементов макета.

Я на самом деле не проверял ничего из этого, поэтому на данный момент это теоретическое решение. Я не знаю ни одного способа сделать это решение с помощью дизайнера, если это было желательно.

Другие советы

Преобразуйте изображение в QPixmap (используйте QPixmap.fromImage (img) ), а затем вы можете использовать scaledToHeight () .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top