Python Tkinter для цикла используется и изображение не загружается - PullRequest
0 голосов
/ 23 февраля 2019

Мое изображение не загружается.Я понятия не имею.Вот часть моего кода.Размер моего изображения невелик по высоте и ширине.Также только последнее изображение показывает по какой-то причине:

lenlist1 = len(list1)
""" Displays text and photo """
for i in range(lenlist1):
    name = list1[i]
    Pic = Piclist[i]

    height = i * 400

    canvas.create_text(1,height,text=name,anchor=tkinter.NW)
    pic = tkinter.PhotoImage(file = Pic)
    root.pic = pic

    height2 = (i*400) + 20
    canvas.create_image(1,height2,image=pic, anchor = tkinter.NW)




frame.pack()

1 Ответ

0 голосов
/ 23 февраля 2019

Каждый раз в этом цикле переменной pic назначается новый объект tkinter.PhotoImage.Если предыдущий объект, который был присоединен к этому имени, не имеет других ссылок на него, он подвергается сборке мусора.Как указано здесь :

Вы должны сохранять ссылку на объект изображения в вашей программе Python, либо сохраняя его в глобальной переменной, либо присоединяя его к другому объекту.

Когда объект PhotoImage собирается сборщиком мусора Python (например, когда вы возвращаетесь из функции, которая сохранила изображение в локальной переменной), изображение очищается, даже если оно отображается виджетом Tkinter.

Чтобы избежать этого, программа должна сохранять дополнительную ссылку на объект изображения.

Например, вы можете добавить каждый pic в список, чтобы каждое изображение всегда имело ссылкук этому.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...