繁体   English   中英

如何使用OOP枕头在Tkinter中显示图像

[英]How to show image in tkinter using pillow with OOP

我正在编写一个程序,需要在某个位置按一下按钮将图像显示在框架上。 我使用的是面向对象的方法,但不会显示图像。 如果我做类似的事情:

from tkinter import *
from PIL import Image, ImageTk

root = Tk()
pic = Image.open("image.jpg")
tkpic = ImageTk.PhotoImage(pic)
label = Label(root, image=tkpic)
label.pack()
root.mainloop()

效果很好。 但是,如果我创建一个框架并尝试显示如下图片:

from tkinter import *
from PIL import Image, ImageTk

class picframe(Frame):
    def __init__(self, parent):
        Frame.__init__(self, parent)
        button = Button(self, text="show", command=self.showpic)
        button.pack()
    def showpic(self):
        pic = Image.open("image.jpg")
        tkpic = ImageTk.PhotoImage(pic)
        label = Label(self, image=tkpic)
        label.pack()

root = Tk()

frame = picframe(root)
frame.pack()

root.mainloop()

当我按下按钮时,它会像试图显示图像一样展开窗口,但没有任何显示,只是变成了更宽的窗口。 那我在做什么错?

先感谢您!

由于在函数中创建了图片,因此在函数退出时将对垃圾桶tkpic进行垃圾回收。 您需要保存对图像的引用:

def showpic(self):
    pic = Image.open("image.jpg")
    tkpic = ImageTk.PhotoImage(pic)
    label = Label(self, image=tkpic)
    label.image = tkpic  # Save reference to image
    label.pack()

另外,您可以通过将其作为实例变量来确保图像引用的持久性:

def showpic(self):
    pic = Image.open("images/beer.png")
    self.tkpic = ImageTk.PhotoImage(pic)
    label = Label(self, image=self.tkpic)
    label.pack()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM