python - 图像未显示 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()
将出现窗口但未显示图像
解决方案
如果您创建图像时没有在某处保留强引用,则会在 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()
推荐阅读
- java - 在 JComponent 处创建阴影的颜色与白色不同的问题
- laravel-5 - 动态 router.addRoutes 导入组件的问题
- graphql - 如何在将父节点传递给解析器之前修改父节点?
- mongodb - mongo 通过 docker 从文件夹中恢复转储
- angular - 数据绑定这个角度代码有什么问题
- c# - 如何使用 EF 保存实体并避免创建新模型?
- c# - 如何在 Outlook 的系统发送电子邮件中显示背景图像?
- r - 如何在R中画一个松鼠
- python - 有什么办法可以增加 tkinter gui 窗口的图标大小
- java - 在 Java SignalR 客户端中未调用 hubProxy.broadcastMessage