首页 > 解决方案 > 如何更改 tkinter 中按钮的可见性?

问题描述

我是 python 新手,我正在尝试创建一个应用程序,我希望只有在单击“显示”按钮后才能看到按钮。该按钮从应用程序开始时不应该是可见的,它应该只有在单击“显示”按钮后才可见。

我有这个代码,它在单击另一个按钮后隐藏了该按钮。隐藏按钮后,它将其文本更改为“显示”。


from tkinter import *

root = Tk()

btn1 = Button(root,text="Example")
btn1.visible = True
btn1.place(x=20, y=50)
btn1.pi = btn1.place_info()

btn3 = Button(root, text="click me", command=lambda:plugin())
btn3.place(x=20, y=150)

def plugin():
    master = Tk()

    def toggle1():
        if btn1.visible:
            btnToggle1["text"] = "Show Example"
            print ("Now you don't")
            btn1.place_forget()
        else:
            btn1.place(btn1.pi)
            print ("Now you see it")
            btnToggle1["text"] = "Hide Example"
        btn1.visible = not btn1.visible

    
    btnToggle1 = Button(master, text="Hide Example", command=toggle1)
    btnToggle1.place(x=70, y=150)

    master.mainloop()

root.mainloop()

我希望该按钮仅在单击“显示”按钮后才显示,而不是从一开始就显示。

标签: pythonpython-3.xtkinter

解决方案


冒着明显的风险,如果您不希望按钮在启动时可见,请不要在启动时显示按钮。

您在程序开始附近使用这行代码明确地使按钮可见:

btn1.place(x=20, y=50)

然后你btn1.pi通过调用来设置place_info,但你不需要这样做。您可以直接设置btn1.p而无需先调用.place后跟place_info.

btn1 = Button(root,text="Example")
btn1.visible = False
btn1.pi = {"x": 20, "y": 50}

请注意,我也更改btn1.visible为 False。您实际上不需要单独的属性来跟踪它是否可见,tkinter 可以使用 method 回答该问题winfo_viewable()

或者,您可以在计算后简单地删除按钮btn1.pi

btn1.place(x=20, y=50)
btn1.visible = False
btn1.pi = btn1.place_info()
btn1.place_forget()

推荐阅读