Tkinter холст с изображением просто белый

#python #image #user-interface #tkinter

#python #изображение #пользовательский интерфейс #tkinter

Вопрос:

У меня есть круглое изображение в формате PNG, которое имеет размер 2210×2210 , и в моем приложении на Python я использую Tkinter библиотеку, а PIL ImageTk amp; Image также для изменения размера и отображения изображения на холсте. Код, с которым я в итоге столкнулся, таков:

 image=Image.open("/filePath")
image=image.resize((60,60),Image.ANTIALIAS)
powerImage=Tkinter.Canvas(self,width=60,height=60)
powerImage.grid(column=1,row=0)
powerImage.create_image(0,0,image=ImageTk.PhotoImage(image),anchor=Tkinter.NW)
 

—Обновленный код

 image=Image.open("/filePath")
image=image.resize((60,60),Image.ANTIALIAS)
powerImage=Tkinter.Canvas(self,width=60,height=60)
powerImage.grid(column=1,row=0)
img=ImageTk.PhotoImage(image)
powerImage.create_image(60,60,image=img,anchor=Tkinter.NW)
 

Но все , что я получаю , — это пустая белая коробка с размерами 60x60 . Я не получаю никаких ошибок и нахожусь на пределе своих возможностей по отладке.

Я попытался изменить параметр position create_image функции на 30x30 и 60x60 на всякий случай, если изображение просто отображалось за пределами холста, но я все равно получаю только белое поле. Я также попытался использовать gif вместо этого версию изображения png , которая ничего не изменила.

Итак, мой вопрос в том, почему мое изображение не отображается, и если мое изображение не отображается, почему холст белый, разве пустой холст не должен быть прозрачным?

заранее спасибо

Комментарии:

1. Вам нужно сохранить ссылку на ImageTk.PhotoImage(image) like photo = ImageTk.PhotoImage(image) , а затем использовать photo in create_image(..., image=photo, ...) . Кроме того, пустой холст не является прозрачным.

2. Я поместил свой обновленный код, как вы сказали, он не изменился, он все тот же. И на пустом холсте полезно знать

3. Ваш код находится внутри функции?

4. Затем вам нужно присвоить ImageTk.PhotoImage(image) переменной экземпляра, а не локальной переменной, например self.img = ImageTk.PhotoImage(image) .

5. Это связано с тем, что локальная переменная будет уничтожена после завершения работы функции, и изображение, которое присвоено локальной переменной, также будет уничтожено, поскольку на нее нет ссылки на переменную.