图片未显示python tkinter

时间:2019-03-16 07:48:07

标签: 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()

将出现窗口,但未显示图像

1 个答案:

答案 0 :(得分:0)

如果创建图像时未在某个地方保留强引用,则会在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()