如果代码在方法中,则Canvas不会显示PhotoImage图片

时间:2019-01-31 22:02:21

标签: python canvas tkinter tk photoimage

Python的新手,到目前为止,大多数人都喜欢它,但是这个问题很奇怪。完全相同的代码从根开始起作用,但在方法中不起作用。

这不会渲染图像:

from tkinter import *      
root = Tk() 

def draw():
    print("does not work")
    canvas = Canvas(root, width = 300, height = 300)      
    canvas.pack()      
    img = PhotoImage(file="Db.png")      
    canvas.create_image(20,20, anchor=NW, image=img)      

draw()
mainloop()  

但这很好用:

from tkinter import *      
root = Tk() 

print("This works fine")
canvas = Canvas(root, width = 300, height = 300)      
canvas.pack()      
img = PhotoImage(file="Db.png")      
canvas.create_image(20,20, anchor=NW, image=img)      

mainloop()

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

正如martineau在上面的注释中解释的那样,代码存在的问题是img变量仅在函数正在处理时存在,在函数返回后将其删除,并且需要保留对图像对象的引用。将其设置为全局变量可以解决该问题。

非常感谢!