tkinter:将按钮堆叠在彼此之上

时间:2020-10-26 16:06:07

标签: python tkinter

因此,在一个框架中,我创建了一个简单的按钮(button1)。这没什么,但重要的是我创建了放在button1上的button2。按钮正常工作。例如,我可以单击button2来忘记button1,这会使button2自动消失,因为它被放置在button1中,而这正是我想要的。但是我遇到了一个奇怪的错误,其中button2有时可见,有时却不可见。您必须四处移动鼠标,有时它会出现并且可以单击,如果您将鼠标移开,它有时会消失。当您单击button1时,它也会消失。但我希望它始终可见。有点像button2的优先级高于button1。我该如何解决这个奇怪的错误?

from tkinter import *

def delete_buttons():
    button1.place_forget()

root = Tk()
root.geometry("400x400")

frame = Frame(root, bg="yellow")
frame.place(relx = 0.1, rely=0.1, relwidth=0.8, relheight=0.8)

# button 2 is created on top of button1
button1 = Button(frame, text="this is a button")
button1.place(relx=0.2, rely=0.2, relwidth=0.6, relheight=0.6)
button2 = Button(button1, text="delete 1st and 2nd button", command=delete_buttons)
button2.place(relx=0.1, rely=0.6, relwidth=0.8, relheight=0.3)

root.mainloop()

1 个答案:

答案 0 :(得分:0)

按钮可能不打算用作父窗口小部件,因此可能会出现意外行为。

您可以将frame用作两个按钮的父级,并且仍将它们显示在彼此的顶部。您只需要更仔细地计算位置,因为它现在相对于框架而不是button1

# change the delete function to:
def delete_buttons():
    button1.place_forget()
    button2.place_forget()

# and button2 to:
button2 = Button(frame, text="delete 1st and 2nd button", command=delete_buttons)
button2.place(relx=0.3, rely=0.55, relwidth=0.4, relheight=0.2)