Как мне использовать PIL с Tkinter? - PullRequest
3 голосов
/ 06 августа 2009

Я упускаю что-то на самом базовом уровне, когда дело доходит до загрузки изображения с использованием 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 ]

6 голосов
/ 06 августа 2009

Tkinter должен быть создан перед вызовом ImageTk.PhotoImage ():

TK.Tk()
0 голосов
/ 21 февраля 2013

Это правда, что Мередит сказала, что вам обязательно нужно добавить эту строку!

Я хотел бы показать вам мое форматирование изображения, а затем сравнить его с вашим и посмотреть, есть ли другой код, мой код для изображения

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 объяснить, как я могу использовать PIL с Tkinter?

Знание - сила, поэтому, пожалуйста, поделитесь.

...