代码之家  ›  专栏  ›  技术社区  ›  Yes - that Jake.

我该如何将pil与tkinter一起使用?

  •  3
  • Yes - that Jake.  · 技术社区  · 15 年前

    当使用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()显示。我错过了什么?

    2 回复  |  直到 9 年前
        1
  •  6
  •   Meredith L. Patterson    15 年前

    在调用imagetk.photoImage()之前,必须实例化tkinter:

    TK.Tk()
    
        2
  •  -1
  •   Maham    9 年前

    梅雷迪思说的话是真的,你一定要加上这句话!

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

    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和照片图像 我不禁想知道这两种方法都正确吗? 现在我还没有足够的知识来完全回答您的PIL问题,但是比较这两种代码是很有趣的,因为它们是不同的。我只能建议在涉及到人们与我共享的示例代码时做我该做的事情,也就是说,“如果我的代码不起作用,请尝试示例代码,看看它是否修复了代码”,当我找到一些有用的东西时,我会坚持下去。

    如果有人对tkinter有更深入的了解,请解释一下它的工作原理,我如何使用pil和tkinter?

    知识就是力量,请分享。