here_for_ever 2022-05-14 09:58 采纳率: 80%
浏览 126
已结题

tkinter库包装函数后图片无法显示

我遇到一个问题:

使用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()
这时是可以显示的

img

但是包装成函数后就无法显示
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()

img

所以谁能帮助我一下,感激不尽
  • 写回答

2条回答 默认 最新

  • Smart-Space 2022-05-14 10:20
    关注

    这个可能是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()
    

    这个问题很多人都遇到了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 7月7日
  • 已采纳回答 6月29日
  • 创建了问题 5月14日

悬赏问题

  • ¥15 WPF 大屏看板表格背景图片设置
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示