繁体   English   中英

我的代码在函数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图像,您需要对每个图像保持持久性引用 (请参阅此答案文档 )。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM