首次编辑:24/3/22/13:59
最后编辑:24/3/22/14:08
在canvas中创建图片一般如下:
from tkinter import *
root = Tk()
c = Canvas(root)
# 在canvas中创建图片
image = PhotoImage(file="img/熊猫人.png")
canvas.create_image(100, 100, image = image)
c.grid()
root.mainloop()
但如果将创建图片的步骤封装在函数中:
from tkinter import *
def func(canvas):
# 在canvas中创建图片
image = PhotoImage(file="img/熊猫人.png")
canvas.create_image(100, 100, image = image)
root = Tk()
c = Canvas(root)
c.grid()
func(c)
root.mainloop()
会发现图片无法显示。
这是由于image这个变量定义于函数func中,属于局部变量,在函数结束之后,变量就被垃圾回收了。
而create_image
所指定的image
参数却直接与这个被回收的变量相关,因此图片无法显示。
只要保证image这个变量不被垃圾回收即可。
按照这个思路可以采取的办法有很多,比如将image声明为全局变量。
def func(canvas):
# 在canvas中创建图片
global image
image = PhotoImage(file="img/熊猫人.png")
canvas.create_image(100, 100, image = image)
如果是在对象的方法中创建这个图片,则可以把image
变量设置为成员变量。
作者:码鸽
链接:https://code-pigeon.github.io/blog/html/tkinter画布canvas绘制图片不显示.html
版权声明:博客所有原创内容(包括但不限于文章、图像等)除特别声明外,均采用CC BY-NC-SA 4.0国际许可协议。任何人均可自由传播,但禁止用于商业用途且必须署名并以相同方式分享。