【问题标题】:How do I use PIL with Tkinter?如何在 Tkinter 中使用 PIL?
【发布时间】:2010-11-17 05:12:42
【问题描述】:

在使用 PIL 加载图像并将其显示在 Tkinter 创建的窗口中时,我在非常基本的层面上遗漏了一些东西。我正在尝试做的最简单的形式是:

import Tkinter as TK
from PIL import Image, ImageTk

im = Image.open("C:\\tinycat.jpg")
tkIm = ImageTk.PhotoImage(im)
tkIm.pack()
TK.mainloop()

当我尝试运行上面的代码时,我得到以下信息:

RuntimeError: Too early to create image
Exception AttributeError: "PhotoImage instance has no attribute 
'_PhotoImage__photo'" in <bound method PhotoImage.__del__ of 
<PIL.ImageTk.PhotoImage instance at 0x00C00030>> ignored

我已确认该文件存在并且可以在图像编辑器中打开,并且可以使用 im.show() 显示它。我错过了什么?

【问题讨论】:

标签: python python-imaging-library tkinter


【解决方案1】:

Meredith 说的非常正确,您肯定需要添加该行!

我想向您展示我的图像格式,然后将其与您的进行比较,看看是否有任何不同,我的图像代码是

master.image = PhotoImage(file="Banditlogo.gif")
w = Label(master, image=master.image)
w.photo = master
w.pack()

你的代码是

im = Image.open("C:\\tinycat.jpg")
tkIm = ImageTk.PhotoImage(im)
tkIm.pack()

我们都在使用 PIL 和 PhotoImage 我不禁想知道这两种方法都正确吗? 目前,我没有足够的知识来完全回答您的 PIL 问题,但是比较两个代码很有趣,因为它们是不同的。对于人们与我分享的示例代码,我只能建议做我所做的事情,那就是“如果我的代码不起作用,请尝试示例代码,看看是否能修复代码”,当我发现我坚持的东西时用它。

请对 Tkinter 有更多了解的人解释一下如何在 Tkinter 中使用 PIL 的工作原理?

知识就是力量,所以请分享。

【讨论】:

    【解决方案2】:

    在调用 ImageTk.PhotoImage() 之前必须先实例化 Tkinter:

    TK.Tk()
    

    【讨论】:

      猜你喜欢
      • 2020-04-19
      • 2012-04-12
      • 2022-06-27
      • 1970-01-01
      • 1970-01-01
      • 2013-08-24
      • 1970-01-01
      • 1970-01-01
      • 2011-06-18
      相关资源
      最近更新 更多