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()