Кнопка не отображается при вызове canvas.create_window()

Я немного возился с tkinter в python, и я хочу добавить несколько кнопок на свой экран холста. Но когда я запускаю скрипт, кнопка не отображается на экране. Это немного сложно, но я создаю кнопки из цикла for, а затем добавляю их в список.

Это мой код:

      from tkinter import * 

class Application:
    def __init__(self): 
        self.window = Tk()
        self.window.geometry("1280x720")
        self.window.resizable(False, False)        

        self.initHomeWindow()

        self.window.mainloop()

    def initHomeWindow(self):
        def initButtons():
            self.buttonList = []
            self.button_load = {}
            self.button = {}

            imgInfo = [
                    ['Abs', '105', '425.97', '310'], #1st one is button itself, 2nd one is width of the button, 3rd one is the x-position of the button, 4th one is y-position of the button. 
                    ['Arms', '123', '425.97', '370'],
                    ['Back', '117', '425.97', '430'],
                    ['Calves', '128', '848', '314.5'],
                    ['Delts', '121', '425.97', '490'],
                    ['Glutes', '128', '848', '364.5'],
                    ['Hams', '127', '848', '414.5'],
                    ['Pecs', '112', '425.97', '550'],
                    ['Quads', '128', '848', '464.5'],
                    ['Traps', '126', '425.97', '610']
            ]

            for x in range(len(imgInfo)):
                self.button[str(imgInfo[x][0])] = Button(self.window, width=int(imgInfo[x][1]), height=49)

                self.buttonList.append([self.button[str(imgInfo[x][0])], imgInfo[x][2], imgInfo[x][3]])

        initButtons()

        self.window.overrideredirect(False)
        self.window.geometry("1280x720")

        self.canvas2 = Canvas(self.window, highlightthickness=0, bg="#1b1b1b")
        self.canvas2.pack(fill=BOTH, expand=TRUE)

        for x in range(len(self.buttonList)):
            self.canvas2.create_window(float(self.buttonList[x][1]), float(self.buttonList[x][2]), window=self.buttonList[x][0])

Application()

Когда я запускаю скрипт, кнопка не отображается на экране (см. Изображение)

Надеюсь, кто-нибудь поможет мне с этой проблемой, заранее спасибо!

1 ответ

Ваши кнопки находятся под холстом по оси Z из-за порядка, в котором вы создаете кнопки и холст, и того факта, что кнопки являются дочерними элементами корневого окна, а не холста.

Лучше всего сделать кнопки дочерними по отношению к холсту, но вы также можете использовать способ поднять кнопки выше в порядке наложения:

      for x in range(len(self.buttonList)):
    self.buttonList[x][0].lift()
    ...
Другие вопросы по тегам