Qt Designer. Масштабирование изображения
Куда в Qt Designer и что мне прописать чтобы картинка поместилась полностью,
но в маленьком размере?
Ответы (2 шт):
Я не знаю, как это будет работать в дизайнерах и прочем. Я даже не понимаю из условия для какого языка вопрос. Буду говорить для Питон. Для того, чтобы разместить миниатюру в форме, для начала я слепил вот такую функцию:
import PIL.Image as PILImage
import PIL.ImageTk as PILImageTk
import io as io
def lib_resize_image(image_data = "", canvas_width = 200, canvas_height = 200):
if not image_data: image_s = None
else:
img = PILImage.open(io.BytesIO(image_data))
img_width, img_height = img.size
img_ratio = img_width / img_height
canvas_ratio = canvas_width / canvas_height
if img_ratio > canvas_ratio:
new_width = canvas_width
new_height = int(canvas_width / img_ratio)
else:
new_height = canvas_height
new_width = int(canvas_height * img_ratio)
img_resized = img.resize((new_width, new_height), PILImage.BICUBIC)
new_img = PILImage.new("RGB", (canvas_width, canvas_height), "black")
position = ((canvas_width-new_width) // 2, (canvas_height-new_height) // 2)
new_img.paste(img_resized, position)
image_s = PILImageTk.PhotoImage(new_img)
return image_s
Назначение функции - создать миниатюру требуемого размера из изображения, её уже можно будет поместить в Canvas в форме. В функцию в качестве параметров передаётся содержимое графического файла (вот просто содержимое) и размеры Canvas. Оформление может выглядеть так:
image_s = lib_resize_image(image_data = "считанное в переменную изображение", canvas_width = 300, canvas_height = 300)
mycanvas.delete("all")
mycanvas.create_image(0, 0, image = image_s, anchor = "nw")
В результате миниатюра будет размещена в Canvas, но в зависимости от размеров исходного изображения и размеров Canvas появятся чёрные полосы - с боков или сверху и снизу. В реале у меня работает немножко не так. Изображения у меня хранятся в базе данных sqlite3. Я считываю содержимое поля BLOB (которое просто склад изображений), передаю содержимое в функцию и получаю миниатюру заданного размера для размещения в Canvas.
- Установите размер для QLabel
- scaledContents : bool
Это свойство определяет, будет ли метка масштабировать свое содержимое, чтобы заполнить все доступное пространство.
Если этот параметр включен и на метке отображается растровое изображение, растровое изображение будет масштабироваться, чтобы заполнить доступное пространство.
По умолчанию это свойство имеет значение false
.
Ok.png