Tkinter & PIL Resize an image to fit a label

后端 未结 1 753
别跟我提以往
别跟我提以往 2020-12-30 05:44

I\'m trying to show a picture in Tkinter using PIL. As suggested in a previous question, I use a label for this:

from Tkinter import *

class App(Frame):
            


        
相关标签:
1条回答
  • 2020-12-30 06:12

    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, 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()
    
    0 讨论(0)
提交回复
热议问题