0

I am trying to create an image in a canvas using tkinter, but if the code to generate the image is inside a function, it doesn't seem to work.

Code to create image:

from tkinter import *

from PIL import Image, ImageTk

window=Tk()
window.title('Chess')
window.geometry("800x800+10+20")
c=Canvas(window, width=800, height=800)

pic = Image.open(r"image.png")   
pic = pic.resize((80,80))
photo = ImageTk.PhotoImage(pic)
c.create_image(240, 160, image=photo,anchor="nw")

c.pack()

which works. However, if I try to create the image in a function like this:

def func():
    pic = Image.open(r"image.png")   
    pic = pic.resize((80,80))
    photo = ImageTk.PhotoImage(pic)
    c.create_image(160, 160, image=photo,anchor="nw")
    c.pack()

func()

no image is displayed. Does anybody know what is wrong?

from tkinter import *

from PIL import Image, ImageTk

window=Tk()
window.title('Chess')
window.geometry("800x800+10+20")
c=Canvas(window, width=800, height=800)

#image creation function
def func():
    pic = Image.open(r"image.png")   
    pic = pic.resize((80,80))
    photo = ImageTk.PhotoImage(pic)
    c.create_image(160, 160, image=photo,anchor="nw")
    c.pack()


    

#this works
pic = Image.open(r"image.png")   
pic = pic.resize((80,80))
photo = ImageTk.PhotoImage(pic)
c.create_image(240, 160, image=photo,anchor="nw")

#this doesnt work
function()

c.pack()

0 Answers0