Почему изображение не отображается в tkinter, если PhotoImage не сохранен как переменная?

Я только недавно начал изучать python. Я пытался использовать Тонни. Я гуглил и искал в stackoverflow, например Почему изображение Tkinter не отображается, если оно создано в функции? и Tkinter.PhotoImage не поддерживает изображения в формате png, но пока не нашел похожих вопросов... Я пытался читать документацию, но не могу.

Изображение отображается правильно, когда я сохранил PhotoImage как переменную, а затем использовал canvas.create_image:

tomato_img = PhotoImage(file="/Users/kwanh/PycharmProjects/day-28/tomato.png")

canvas.create_image(110, 112, image=tomato_img)

Однако, если я не сохранил PhotoImage как переменную, изображение больше не отображается:

canvas.create_image(110, 112, image=PhotoImage(file="/Users/kwanh/PycharmProjects/day-28/tomato.png"))

Думаю, я могу просто сохранить его как переменную, но хотел бы знать, не потому ли это, что я сделал что-то не так? Я использовал функции типов, чтобы проверить, относится ли переменная или переменная без к классу tkinter.PhotoImage. Спасибо.


person Kwan Hui    schedule 25.12.2020    source источник
comment
Это может ответить на ваш вопрос.   -  person Atlas435    schedule 25.12.2020
comment
PhotoImage во втором случае существует только достаточно долго для завершения вызова create_image(). По-видимому, этого недостаточно, чтобы его можно было отобразить. Я думаю, что тот факт, что tkinter не увеличивает счетчик ссылок на объекты изображения, что обычно происходит в коде Python, и поэтому сохранение в локальной переменной часто вызывает проблемы. Это может произойти, например, если вы поместите первый код внутри функции.   -  person martineau    schedule 25.12.2020
comment
@martineau Таким образом, сохранение его как переменной было проблемой, потому что изображение исчезает слишком быстро, поскольку tkinter не увеличивает счетчик ссылок изображения. Я еще не пробовал использовать его в функции. Спасибо, что нашли время объяснить так, чтобы я мог понять!   -  person Kwan Hui    schedule 27.12.2020
comment
@Atlas435 спасибо за интересную ссылку о сборке мусора. Я понимаю больше о том, как все работает после прочтения!   -  person Kwan Hui    schedule 27.12.2020