TKinter, как разместить уменьшенную копию изображения?

Добрый день всем!

Вывожу изображение с помощью виджета Label

Если я жестко задаю размеры изображения, то проблема заключается в том, что изображение видимо не все, а только часть (центр изображния, если изображение больше чем форма или виджет на которой оно выводится). Я перепробовал все возможные параметры, пробовал использовать pack, place и grid.

Подскажите, каким образом можно добиться такого эффекта, чтобы выводимое изображение уменьшалось(или растягивалось), пропорционально, с изменением размера родительской формы? Неужели единственный вариант это делать ресайз изображения до вывода на форму?
  • Вопрос задан
  • 1171 просмотр
Решения вопроса 1
@Xander017
Попробуй так:

from tkinter import *
from PIL import Image, ImageTk

class App(Frame):
    def __init__(self, master):
        Frame.__init__(self, master)
        self.columnconfigure(0,weight=1)
        self.rowconfigure(0,weight=1)
        self.original = Image.open('image.jpeg')
        self.image = ImageTk.PhotoImage(self.original)
        self.display = Canvas(self, bd=0, highlightthickness=0)
        self.display.create_image(0, 0, image=self.image, anchor=NW, tags="IMG")
        self.display.grid(row=0, sticky=W+E+N+S)
        self.pack(fill=BOTH, expand=1)
        self.bind("<Configure>", self.resize)

    def resize(self, event):
        size = (event.width, event.height)
        resized = self.original.resize(size,Image.ANTIALIAS)
        self.image = ImageTk.PhotoImage(resized)
        self.display.delete("IMG")
        self.display.create_image(0, 0, image=self.image, anchor=NW, tags="IMG")

root = Tk()
app = App(root)
app.mainloop()
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы