Кнопка не отображается при вызове 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()
...