Tkinter & PIL Resize an image to fit a label Tkinter & PIL Resize an image to fit a label tkinter tkinter

Tkinter & PIL Resize an image to fit a label


If you know the size you want, use PIL to resize the image:

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)

You could also use a Canvas to display the image, I like it more:

from Tkinter import *from PIL import Image, ImageTkclass 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()