调用 canvas.create_window() 时按钮不显示

问题描述

我在 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','370'],['Back','117','430'],['Calves','128','848','314.5'],['Delts','121','490'],['glutes','364.5'],['Hams','127','414.5'],['pecs','112','550'],['Quads','464.5'],['Traps','126','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()

enter image description here

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

希望有人能帮我解决这个问题,提前致谢!

解决方法

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

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

for x in range(len(self.buttonList)):
    self.buttonList[x][0].lift()
    ...

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...