Добавление фонового изображения в новое окно в Tkinter

#python #python-3.x #tkinter

#python #python-3.x #tkinter

Вопрос:

 def func_checkprice():
    try:
        global product_link
        
        product_link = link.get()
        page =requests.get(product_link)
        soup = BeautifulSoup(page.content, 'html.parser')
        product_name = soup.find(class_='_35KyD6').get_text()
        price = soup.find(class_='_1vC4OE _3qQ9m1').get_text()
        print(product_name ,price, ctime())
        product_window = Tk()
        product_window.geometry("200x200")
        back_img1 = ImageTk.PhotoImage(Image.open("388275.jpg"))
        back_label1 = Label(product_window, image=back_img1)
        back_label1.place(x=0, y=0, relheight=1, relwidth=1)
        details_name = Label(product_window , text=product_name, wraplength=120)
        details_price = Label(product_window , text=price, wraplength=120)
        details_name.grid(row=0,column=0)
        details_price.grid(row=0,column=1)
        okay_button = Button(product_window, text="Okay", command=product_window.destroy)
        okay_button.grid(row=1, column=0, columnspan=2, ipadx=10, pady=5)
        link.delete(0,END)
    except:
        popup = messagebox.showerror("Error","Invalid Link") 
  

Фоновый код отлично работает для корневого окна. Этот product_window открывается, когда я нажимаю на кнопку в корневом окне. Я просто не могу добавить фон в новое окно, перепробовал все, что мог.

Комментарии:

1. back_img1 собирается мусор (да, даже если он используется в ярлыке). Вы должны сохранить другую ссылку на него.

2. извините, что? Не понял вас.

Ответ №1:

Либо скажите global back_img1 поверх вашей функции, чтобы сохранить ссылку, либо вы также можете сказать back_label1.image=back_img1 . Это предотвратит сборку изображения pythons сборщиком мусора.

И я предполагаю, что ваше product_window первое окно (родительское) в вашей программе, поскольку вам не разрешено использовать более одного экземпляра Tk() , если это не главное окно вашей программы, замените Tk() на Toplevel() , поскольку они используются для ссылки дочерних окон на родительское Tk() окно. Если существует более одного экземпляра Tk() , вы получите сообщение об ошибке, которое pyimagex does not exist

Надеюсь, это развеяло ваши сомнения.

Приветствия