Не работает фото на кнопке в tkinter?

Вот код:

from tkinter import *
from tkinter import ttk
import webbrowser
tab2 =Tk()
def site(url):
    webbrowser.open(url)
def dnevn():
            def run():
                site('https:/dnevnik.ru')

            photo = PhotoImage(file = "EerETRKXYAMRF4Y.png")
            photo = photo.subsample(2,2)
            Button(dnevnik, image = photo).pack(side = TOP)
tabs = ttk.Notebook(tab2)
tabs.add(dnevnik,text = 'Dnevnik.ru')
tabs.pack(expand=1, fill='both')
dnevn()
tab2.mainloop()

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

Автор решения: FotonPC

Здесь у вас не отображается фото, потому что не храниться на него ссылка, потому что вы объявляете перемеyную photo, которая локальная в функции, и после выхода из функции питон собирает объект изображения в мусор и удаляет.

from tkinter import *
from tkinter import ttk
import webbrowser
tab2 =Tk()

photo_cache = []

def dnevn():

    photo = PhotoImage(file = "EerETRKXYAMRF4Y.png")
    photo = photo.subsample(2,2)
    photo_cache.append(photo)
    Button(dnevnik,
        image = photo_cache[-1],
        command=lambda: webbrowser.open('https://dnevnik.ru')

        ).pack(side = TOP)
    
tabs = ttk.Notebook(tab2)
dnevnik = Frame(tabs)
tabs.add(dnevnik,text = 'Dnevnik.ru')
tabs.pack(expand=1, fill='both')
dnevn()
tab2.mainloop()

Поэтому я сделал список в который кэшируются эти фотки.

→ Ссылка