1

我在 python 中使用 tkinter 有点混乱,我想在我的画布屏幕上添加一些按钮。但是当我运行脚本时,按钮没有出现在屏幕上。这有点复杂,但我正在从 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()

在此处输入图像描述

当我运行脚本时,按钮未显示在屏幕上(见图)

我希望有人可以帮助我解决这个问题,在此先感谢!

4

1 回答 1

1

由于您创建按钮和画布的顺序以及按钮是根窗口的子窗口而不是画布的事实,因此您的按钮位于 z 轴上的画布下方。

最好将按钮设置为画布的子级,但您也可以使用该lift方法将按钮按堆叠顺序提高:

for x in range(len(self.buttonList)):
    self.buttonList[x][0].lift()
    ...
于 2021-05-29T15:58:09.490 回答