How to open PIL Image in Tkinter on Canvas
Try creating a PIL Image first, then using that to create the PhotoImage.
from Tkinter import *import Image, ImageTkroot = Tk()root.geometry('1000x1000')canvas = Canvas(root,width=999,height=999)canvas.pack()pilImage = Image.open("ball.gif")image = ImageTk.PhotoImage(pilImage)imagesprite = canvas.create_image(400,400,image=image)root.mainloop()
(An old question, but the answers so far are only half-complete.)
Read the docs:
class PIL.ImageTk.PhotoImage(image=None, size=None, **kw)
image
– Either a PIL image, or a mode string. [...]file
– A filename to load the image from (usingImage.open(file)
).
So in your example, use
image = ImageTk.PhotoImage(file="ball.gif")
or explicitly
image = ImageTk.PhotoImage(Image("ball.gif"))
(And remember – as you did correctly: Keep a reference to the image object in your Python program, otherwise it is garbage-collected before you seee it.)
You can import multiple image formats, and resize with this code. "basewidth" sets the width of your image.
from Tkinter import *import PILfrom PIL import ImageTk, Imageroot=Tk()image = Image.open("/path/to/your/image.jpg")canvas=Canvas(root, height=200, width=200)basewidth = 150wpercent = (basewidth / float(image.size[0]))hsize = int((float(image.size[1]) * float(wpercent)))image = image.resize((basewidth, hsize), PIL.Image.ANTIALIAS)photo = ImageTk.PhotoImage(image)item4 = canvas.create_image(100, 80, image=photo)canvas.pack(side = TOP, expand=True, fill=BOTH)root.mainloop()