2016-10-19 2 views
-1

Я пытаюсь поместить изображение с размером PIL в объект tkinter.PhotoImage.AttributeError при создании объекта tkinter.PhotoImage с PIL.ImageTk

import tkinter as tk # I use Python3 
from PIL import Image, ImageTk 

master = tk.Tk() 
img =Image.open(file_name) 
image_resized=img.resize((200,200)) 
photoimg=ImageTk.PhotoImage(image_resized) 

Однако, когда я позже попытаться вызвать

photoimg.put("#000000", (0,0)) 

Я получаю

AttributError: 'PhotoImage' object has no attribute 'put' 

Хотя это:

photoimg=tk.PhotoImage(file=file_name) 
photoimg.put("#000000", (0,0)) 

не вызывает ошибку. Что я делаю неправильно?

+2

А вы посмотрите на их реализации? Это не те же классы «PhotoImage». У них нет такой же реализации. Вы должны определить, какой из них вы хотите использовать, и достичь своей цели на основе того, как этот класс реализован. – idjaw

+0

О, спасибо, это объясняет это. Есть ли способ конвертировать объект ImageTk.Photoimage в объект 'tkinter.Photoimage' или мне сначала нужно сохранить изображение PIL, а затем загрузить его в tkinter.PhotoImage через его имя файла? – user7043649

+0

Я никогда не использовал ни один из этих модулей. Я просто посмотрел на код каждого и увидел, что они разные. Вам нужно будет посмотреть в документации, чтобы узнать, какие у вас варианты. Посмотрите на ответ, который был только что опубликован. Предоставляется информация. – idjaw

ответ

2

ImageTk.PhotoImage как в PIL.ImageTk.PhotoImage не тот же класс, как tk.PhotoImage (tkinter.PhotoImage), они просто имеют такое же имя

здесь ImageTk.PhotoImage документы: http://pillow.readthedocs.io/en/3.1.x/reference/ImageTk.html#PIL.ImageTk.PhotoImage , как вы можете видеть, что нет никакого способа положить в него.

но ImageTk.PhotoImage действительно есть это: http://epydoc.sourceforge.net/stdlib/Tkinter.PhotoImage-class.html

Смежные вопросы