Как разрешить масштабирование с одинаковым соотношением сторон в (Py) Qt?
-
06-07-2019 - |
Вопрос
Если у вас есть QImage, обернутый в QLabel, возможно ли увеличить его или уменьшить при изменении размера окна и сохранении соотношения сторон (чтобы изображение не искажалось)? Я понял, что он может масштабироваться с помощью setScaledContents (), и вы можете установить минимальный и максимальный размер, но изображение все равно теряет свой аспект. Р>
Было бы здорово, если бы это можно было объяснить с помощью Python (так как я не знаю c ++), но я возьму то, что смогу получить. : -)
Заранее спасибо!
Решение
Я показываю это как C ++, в котором находится документация, на которую я смотрю. Не должно быть слишком сложно конвертировать в python.
Вам необходимо создать пользовательскую производную от QLayoutItem
, которая переопределяет bool hasHeightForWidth ()
и int heightForWidth (int width)
, чтобы сохранить соотношение сторон как-то. Вы можете либо передать изображение и запросить его, либо просто установить соотношение напрямую. Вам также необходимо убедиться, что функция widget ()
возвращает указатель на соответствующую метку.
Как только это будет сделано, вы можете добавить элемент макета в макет так же, как в виджете. Поэтому, когда ваш ярлык будет добавлен, измените его, чтобы использовать свой класс элементов макета.
Я на самом деле не проверял ничего из этого, поэтому на данный момент это теоретическое решение. Я не знаю ни одного способа сделать это решение с помощью дизайнера, если это было желательно.
Другие советы
Преобразуйте изображение в QPixmap
(используйте QPixmap.fromImage (img)
), а затем вы можете использовать scaledToHeight ()
.