我的代码在函数内部不起作用,python3/tkinter

My code doen't work inside a function, python3/tkinter

我正在使用 python3 和 tkinter,第一个代码有效,但第二个代码在我将其放入函数后不再显示图像,我想知道为什么

from tkinter import *
from PIL import Image, ImageTk

root = Tk()
root.title("test")

canv = Canvas(root,width=500, height=500)
canv.pack()
image = ImageTk.PhotoImage(Image.open("C:/Users/tomas/Desktop/carros/carro2.jpg"))
canv.create_image(0,0,anchor="nw",image=image)


root.mainloop()

第二个密码:

from tkinter import *
from PIL import Image, ImageTk

root = Tk()
root.title("test")

def main(): 
    canv = Canvas(root,width=500, height=500)
    canv.pack()
    image = ImageTk.PhotoImage(Image.open("C:/Users/tomas/Desktop/carros/carro2.jpg"))
    canv.create_image(0,0,anchor="nw",image=image)

main()

root.mainloop()

为了正确显示 ImageTk.PhotoImage 图像,您需要对每个图像保持 持久引用 (参见 this answer and the documentation)。

当您的代码离开 main() 函数时,您的 image 对象将被垃圾回收。解决此问题的一种简单方法是将图像引用存储在 canvas 对象中,这样只要您的 canvas 存在,它就不会被垃圾回收:

...
image = ImageTk.PhotoImage(Image.open("C:/Users/tomas/Desktop/carros/carro2.jpg"))
canv.img = image
...