如何在 tk.TopLevel() 上设置背景图片

How to setup a background image on a tk.TopLevel()

我正在尝试为 tk.TopLevel() window 添加背景。

我已成功使用如下相同的代码将背景添加到 tk.Tk()。但是,相同的代码不起作用,让我使用默认背景。

def add_window_launching():
    #initializing window
    add_window=tk.Toplevel()
    add_window.title("Inventaire Petits Débrouillards")
    add_window.geometry('900x350')
    add_window.resizable(width=False, height=False)

    #Setting background
    raw_image=Image.open("C:/Users/Ordinateur/Desktop/db-update-petits-debrouillards/UI/ajout.png")
    background_image=ImageTk.PhotoImage(raw_image)
    background_label = tk.Label(add_window, image=background_image)

    #Adding widgets
    welcome_text=tk.Label(add_window, text="Text")
    object_description=tk.Label(add_window, text="Description de l'objet :")
    description_entry=tk.Entry(add_window, width=100)
    row=SQL.Entries([description_entry], add_window)
    submit_button=tk.Button(add_window, text="Ajouter", command=row.adding_entry)

    #Organizing window
    background_label.place(x=0, y=0, relwidth=1, relheight=1)
    welcome_text.place(anchor="n", relx=0.5, rely=0.25)
    object_description.place(anchor="nw", relx=0.08, rely=0.5)
    description_entry.place(anchor="ne", relx=0.92, rely=0.5)
    submit_button.place(anchor="n", relx=0.5, rely=0.75)

这是脚本的执行结果。 Top window 是主要的 window,bottom window 是 TopLevel。背景必须相同。 我无法 post 图片,因为我的帐户是新帐户,但你会发现我得到的结果 here。 知道为什么它不起作用吗?

PhotoImage 中存在错误。

Garbage Collector 将图像分配给函数中的局部变量时从内存中删除图像,然后您就看不到图像了。

您必须将图像分配给全局变量或某个小部件。通常分配给显示此图像的 Label

 background_label.image = background_image

文档:PhotoImage