使用tkinter库时,不包装函数前图片能显示,包装成函数后显示不了了
from tkinter import *
from PIL import Image,ImageTk
window = Tk()
window.title("24点游戏")
window.geometry("500x500")
img_open = Image.open("红桃1.png")
img_jpg = ImageTk.PhotoImage(img_open)
label_img = Label(window, image=img_jpg)
label_img.place(x=0,y=0)
window.mainloop()
from tkinter import *
from PIL import Image,ImageTk
window = Tk()
window.title("24点游戏")
window.geometry("500x500")
def showTheImg(name,x,y):
img_open = Image.open("{}.png".format(name))
img_jpg = ImageTk.PhotoImage(img_open)
label_img = Label(window, image=img_jpg)
label_img.place(x=x,y=y)
showTheImg("红桃1",0,0)
window.mainloop()
这个可能是Python在函数中自动清除了img_jpg
对象。这是由于Python内部的自动内存释放机制导致的(应该是这个名称)。
解决的方案就是让Python解释器知道这个img_jpg
不应该被清理,方法就是把这个作为Label的一个属性。如下:
from tkinter import *
from PIL import Image,ImageTk
window = Tk()
window.title("24点游戏")
window.geometry("500x500")
def showTheImg(name,x,y):
img_open = Image.open("{}.png".format(name))
img_jpg = ImageTk.PhotoImage(img_open)
label_img = Label(window)
label_img.img=img_jpg#重点
label_img.config(image=label_img.img)
label_img.place(x=x,y=y)
showTheImg("红桃1",0,0)
window.mainloop()
这个问题很多人都遇到了。
最简单的在函数里加上全局变量声明global就ok了
def showTheImg(name,x,y):
global img_jpg
img_open = Image.open("{}.png".format(name))
......
如有帮助,请给个采纳!