Пропадает изображение (PhotoImage ) в виджете Label

Изображение один раз моргает и пропадает.

import tkinter as tk
import tkinter.filedialog as fd

root=Tk()
frame=Frame(root,width=300,height=300)
frame.pack()

def img():
        global root,frame
        photo = tk.PhotoImage(file='path')
        h=Label(frame, image=photo)
        h.place(x=0,y=0)
        
        frame.update()
        root.update()

Ответы (1 шт):

Автор решения: S. Nick

Жаль, но вы так и не предоставили минимальный воспроизводимый пример.
Я не знаю, что вы делаете или будите делать в вашем коде, но на сейчас проблема в том, что переменная photo удаляется сборщиком мусора после выхода из функции img(). Вам надо как-то продлить срок жизни этой переменной.

Попробуйте так:

import tkinter as tk
import tkinter.filedialog as fd


root = tk.Tk()
frame = tk.Frame(root, width=500, height=500)
frame.pack()
photo = None                                          # +++

def img():
#        global root, frame, photo                    
        global photo                                  # +++
        photo = tk.PhotoImage(file='lena2.png')
        h = tk.Label(frame, image=photo)
        h.place(x=0, y=0)
        
#        frame.update()
#        root.update()
       

img()
root.mainloop()

или так:

from tkinter import *


class Window(Tk):
    def __init__(self):
        super().__init__()
        
        
if __name__ == "__main__":
    main = Window()
    main.geometry("500x500")
    main.resizable(height=False, width=False)
    main.title("Title lena2.png")
    
    bg_img = PhotoImage(file = "lena2.png")
    limg = Label(main, i=bg_img)
    limg.pack()
    
    main.mainloop()

введите сюда описание изображения


lena2.png

введите сюда описание изображения


Вам надо посмотреть в сторону ООП.

→ Ссылка