Tkinter & PIL Изменить размер изображения на этикетке

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

from Tkinter import * class App(Frame): def __init__(self,master): Frame.__init__(self,master) self.grid(row=0) self.columnconfigure(0,weight=1) self.rowconfigure(0,weight=1) image = Image.load('example.png') image = ImageTk.PhotoImage(image.convert('RGBA')) self.display = Label(self,image=image) self.display.grid(row=0) root = Tk() app = App(root) app.mainloop() root.destroy() 

Есть ли способ изменить размер изображения в соответствии с меткой? Например, если example.png равно 2000×1000, но в окне всего 800×600, отображается только часть изображения.

One Solution collect form web for “Tkinter & PIL Изменить размер изображения на этикетке”

Если вы знаете нужный размер, используйте PIL для изменения размера изображения:

 class App(Frame): def __init__(self, master): Frame.__init__(self, master) self.grid(row=0) self.columnconfigure(0,weight=1) self.rowconfigure(0,weight=1) self.original = Image.open('example.png') resized = self.original.resize((800, 600),Image.ANTIALIAS) self.image = ImageTk.PhotoImage(resized) # Keep a reference, prevent GC self.display = Label(self, image = self.image) self.display.grid(row=0) 

Вы также можете использовать Canvas для отображения изображения, мне больше нравится:

 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('example.png') 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() root.destroy() 
  • Tkinter - RuntimeError: превышена максимальная глубина рекурсии
  • Контекст TKinter OpenGL в Python
  • Использование OpenCV с Tkinter
  • Python Tkinter: привязка события нажатия клавиш к активной вкладке в ttk.Notebook
  • Python Tkinter: прокрутка холста с помощью MouseWheel
  • Как вы запускаете свой собственный код вместе с циклом событий Tkinter?
  • Tkinter добавляет номер строки в текстовый виджет
  • Масштабирование GUI Tkinter в разрешении 4k (3840 * 2160)?
  • Python - лучший язык программирования в мире.