Я только недавно начал изучать 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. Спасибо.
PhotoImage
во втором случае существует только достаточно долго для завершения вызоваcreate_image()
. По-видимому, этого недостаточно, чтобы его можно было отобразить. Я думаю, что тот факт, что tkinter не увеличивает счетчик ссылок на объекты изображения, что обычно происходит в коде Python, и поэтому сохранение в локальной переменной часто вызывает проблемы. Это может произойти, например, если вы поместите первый код внутри функции. - person martineau   schedule 25.12.2020