Show/Hide 通过点击 tkinter 按钮添加标签

Show/Hide label by clicking on the tkinter button

我想通过单击按钮隐藏标签并通过单击同一按钮显示相同的标签,我想在单击的按钮下方显示这些标签。我已经尝试了下面的代码,但是通过单击任何按钮,只有 collaborate 标签在按钮 2 的下方可见。但我希望它就像我单击 button1 一样,“get started”标签应该出现在 button1 下方,如果我单击 button2 collaborate”标签应该出现在 button2

下方
import tkinter as tk

root=tk.Tk()

def label_hide_show():
    global hidden
    if hidden:
        label1.pack(side = "top", fill = tk.BOTH)
        hidden = False
    else:
        label1.pack_forget()
        hidden=True
            
hidden = True

btn1 = tk.Button(root, text="Get Started", height=3,width=26,bg="White", fg="Black", command=label_hide_show)
label1 = tk.Label(root, text="Get started")
        
btn1.pack(side = "top", fill = tk.BOTH)

btn2 = tk.Button(root, text="Collaborate", height=3,width=26,bg="White", fg="Black", command=label_hide_show)
label1 = tk.Label(root, text="Collaborate")
        
btn2.pack(side = "top", fill = tk.BOTH)

以上代码的输出:

想到的第一个似乎很简单的解决方案是使用单个标签并根据单击的按钮更新其文本。所以你应该改变你的功能:

def label_hide_show(btn):
    global hidden
    if hidden:
        label1.config(text=btn.cget('text')) # Change text to clicked buttons text
        label1.pack(side = "top", fill = tk.BOTH)
        hidden = False
    else:
        label1.pack_forget()
        hidden=True

btn1 = tk.Button(root, text="Get Started", height=3,width=26,bg="White", fg="Black", command=lambda: label_hide_show(btn1))

label1 = tk.Label(root) # Make sure to just use one of this label

btn2 = tk.Button(root, text="Collaborate", height=3,width=26,bg="White", fg="Black", command=lambda: label_hide_show(btn2))

这样您就可以使用被点击的按钮的文本更新它。

显然,还有其他方法,比如传递要显示的文本而不是将按钮作为参数传递:

def label_hide_show(text):
    global hidden
    if hidden:
        label1.config(text=text)
        label1.pack(side = "top", fill = tk.BOTH)
        hidden = False
    else:
        label1.pack_forget()
        hidden=True

btn1 = tk.Button(root, text="Get Started", height=3,width=26,bg="White", fg="Black", command=lambda: label_hide_show('Get started'))

这个方法的用途是,你可以use/pass除了按钮文字以外的任何文字。这种方法的其他变体包括使用 StringVar() 并在其上调用 set() 来更改标签的文本,本质上是相同的原理,但使用不同的方法集。

更新: 好像我误解了你的问题,仍然很简单,这里有一个例子:

def label_hide_show(btn,text):
    global hidden
    if hidden:
        label1.config(text=text) # Change to passed text
        label1.pack(side = "top", fill = tk.BOTH, after=btn) # Pack it after the btn
        hidden = False
    else:
        label1.pack_forget()
        hidden=True

btn1 = tk.Button(root, text="Get Started", height=3,width=26,bg="White", fg="Black", command=lambda: label_hide_show(btn1,'Label below one'))
btn2 = tk.Button(root, text="Collaborate", height=3,width=26,bg="White", fg="Black", command=lambda: label_hide_show(btn2,'Label below two'))

现在标签将放置在 after 传递的按钮上。