Удаление изображения из рамки (ткинтер, PIL) - PullRequest
0 голосов
/ 27 января 2020

Первоначально я спрашивал о добавлении изображения в рамку tkinter. Код, с которым я закончил, был следующим:

img_load = Image.open('D:\Downloads\Pictures\Python\PNG\\2C.png')
img_load = img_load.resize((140,200), Image.ANTIALIAS)
imgRender = ImageTk.PhotoImage(img_load)
img = tk.Label(frame1, image=imgRender)
img.image = imgRender

Кажется, что пока все работает нормально, но потом возник случай, когда я захотел поменять это изображение на другое. Я мог бы просто загрузить еще один на его место, но я подозреваю, что это может вызвать утечку памяти.

Я столкнулся с методом close объекта PIL Image и попытался его использовать. Я привязал его к кнопке, а затем щелкнул по нему, и ничего не произошло - изображение осталось на экране в кадре, и поэтому оно находится в памяти. Просто чтобы понять, что я делаю, этот код выглядит следующим образом:

img_load.close()

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

Так как мне это сделать?

Редактировать: у меня есть два объекта, о которых мне нужно беспокоиться. Изображение и фотоизображение. Оба являются созданными объектами. Я могу использовать «close» для первого, но, похоже, для второго такого метода не существует.

1 Ответ

0 голосов
/ 27 января 2020

Я бы предложил обновить ярлык новым изображением, которое вы хотите отобразить. Сборщик мусора избавится от старого неиспользуемого изображения. Другое дело, что вы можете закрыть изображение так, как вы это делаете, но это не приведет к обновлению метки.

Единственный способ обновить метку - позвонить по номеру:

img.configure(image="new_image")
img.image="new_image"

После того, как вы это назвали, вы все равно можете закрыть старое изображение с помощью img_load.close(), если хотите. Но Сборщик мусора должен выполнять работу в любом случае ...

...