Фоновая картинка перекрывает все кнопки и надписи

Делаю приложение на tkinter и хочу поставить картинку в качестве фона и на нее все остальные кнопки и надписи. У меня что-то не получается и картинка перекрывает все остальное. Вот код ниже:

root = Tk()
root.geometry('1920x1080')
root.title('QuizOp')
root['bg'] = 'limegreen'



generalframe = Frame(master=root, bg='limegreen')

bgimage = ImageTk.PhotoImage(Image.open("stestimage.jpg"))

bglabel = Label(root, image=bgimage)

createquizbtn = Button(generalframe, bg='white', text='Создать викторину', font='Arial 17', command=createquiz)
proitiquizbtn = Button(generalframe, bg='white', text='Пройти викторину', font='Arial 17', command=proitiquiz)
sendquizbtn = Button(generalframe, bg='white', text='Отправить викторину', font='Arial 17', command=sendquiz)
deletequizbtn = Button(generalframe, bg='white', text='Удалить викторину', font='Arial 17', command=deletequiz)
settingsbtn = Button(generalframe, bg='white', text='Настройки', font='Arial 17', command=settingscmd)


bglabel.pack()


generalframe.pack()
createquizbtn.pack()
proitiquizbtn.pack()
sendquizbtn.pack()
deletequizbtn.pack()
settingsbtn.pack()


root.mainloop()


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

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

Похоже, z-order (порядок, в котором виджеты размещаются друг поверх друга) зависит от того, в каком порядке они созданы (но не от того, в каком порядке вызваны методы размещения place/pack/grid). Из-за того, что Label с картинкой создается после generalframe, Label размещается поверх этого фрейма.

В таком варианте должно работать:

from tkinter import *
from PIL import Image, ImageTk

root = Tk()
root.geometry('1920x1080')
root.title('QuizOp')

# Сначала создаем картинку в окне, потом уже фрейм,
# тогда фрейм будет размещаться поверх картинки
bgimage = ImageTk.PhotoImage(Image.open("stestimage.jpg"))
bglabel = Label(root, image=bgimage)

generalframe = Frame(master=root, bg='limegreen')

...

bglabel.place(x=0, y=0)
generalframe.pack()

...

Скриншот

→ Ссылка