首页 > 解决方案 > 图像未显示 python tkinter

问题描述

当我执行此代码时,我想在我的程序中输入图像

from tkinter import *

root = Tk()

image1 = PhotoImage(file='dog.gif')
label1 = Label(root, image=image1)
label1.pack()

root.mainloop()

图像会出现,但是当我执行此代码时

from tkinter import *

class Image():
    def __init__(self, master):
        self.master = master

        self.display_image()

    def display_image(self):
        self.image = PhotoImage(file='dog.gif')
        self.label1 = Label(self.master, image=self.image)
        self.label1.pack()

if __name__ == '__main__':
    root = Tk()
    Image(root)
    root.mainloop()

将出现窗口但未显示图像

标签: pythontkinter

解决方案


如果您创建图像时没有在某处保留强引用,则会在 Python 的垃圾收集器和 Tkinter 之间产生冲突:存储在中的引用会Label阻止完全破坏,并且图像将是空白的。

另外,注意不要覆盖基类Image,你最好重命名你自己的类My_Image

一个简单的解决方法是创建一个包含图像的全局变量:

from tkinter import *

class My_Image():
    def __init__(self, master):
        self.master = master
        self.display_image()

    def display_image(self):

        self.label1 = Label(self.master, image=label1_img)
        self.label1.pack()


root = Tk()

label1_img = PhotoImage(file='dog.gif')
My_Image(root)

root.mainloop()

或者您甚至可以创建一个全局变量来存储 My_Image 实例:

if __name__ == '__main__':
    root = Tk()
    img = My_Image(root)
    root.mainloop()

推荐阅读