我的代码在函数内部不起作用,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
...
我正在使用 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
...