如何使用带有 OOP 的枕头在 tkinter 中显示图像

拜曼21

我正在制作一个程序,我需要在某个时候按下按钮将图像显示到框架上。我正在使用面向对象的方法,但它不会显示图像。如果我做这样的事情:

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()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用PIL或枕头绘制图像并用TKinter显示

来自分类Dev

使用PIL或枕头绘制图像并用TKinter显示

来自分类Dev

如何使用枕头显示图像?

来自分类Dev

如何使用枕头显示图像?

来自分类Dev

Python /枕头:如何缩放图像

来自分类Dev

使用枕头降低图像的亮度

来自分类Dev

如何使用OOP在Tkinter中调用特定屏幕

来自分类Dev

带有OOP方法的Tkinter回调

来自分类Dev

使用Python 3.4加载到tkinter时出现枕头错误

来自分类Dev

如何使用OOP确保所有元素都显示在Tkinter画布上

来自分类Dev

如何用枕头调整图像大小?

来自分类Dev

如何在Python枕头上加载图像?

来自分类Dev

使用枕头获取tif文件的图像dpi

来自分类Dev

使用枕头将图像转换为webP

来自分类Dev

使用枕头将图像转换为webP

来自分类Dev

使用枕头创建隐匿地隐藏的图像

来自分类Dev

使用枕头的图像处理代码问题

来自分类Dev

如何使用枕头将图像粘贴到更大的图像上?

来自分类Dev

如何在discord.py中将带有枕头的图像裁剪为圆形?

来自分类Dev

像素化图像与枕头

来自分类Dev

枕头中的图像旋转

来自分类Dev

Python枕头图像组合

来自分类Dev

Python图像/枕头:如何使背景的图像更白

来自分类Dev

如何强制枕头将图像调整为任意大小?

来自分类Dev

如何避免枕头保存图像后对其进行轻微编辑?

来自分类Dev

如何在枕头中打开FileStorage类型的图像

来自分类Dev

使用枕头创建隐匿性隐藏图像

来自分类Dev

使用枕头将EPS图像转换为JPG

来自分类Dev

无法使用枕头将图像调整为更大的尺寸吗?