一尘不染

如何在Tkinter中显示/隐藏小部件?

python

我正在尝试创建一个程序,该程序执行一系列给定的用户输入。仅在某些情况下才需要几个用户输入,并且如果可能的话,我想仅在选择一个Checkbutton(表示存在要求这些输入的情况)时显示这些输入值的Entry框和Labels。我不确定该怎么做:

  • 将我要添加的标签和条目框放在已经存在的行之间。

  • 取消选中“选择”按钮时,“隐藏”标签和输入框,而不进行选择,destroy这样,如果重新选择“选择”按钮,则可以再次显示它们而不会丢失任何已输入的数据。

    • 示例:我选择了Checkbutton,在出现的新框中输入数据,然后取消选择Checkbutton(导致不再显示这些框)。如果要重新选择Checkbutton,那么上次选择Checkbutton时输入的数据应该仍然存在。
    • 如果在取消选择之前重新选择了Checkbutton,则“显示”与以前“隐藏”的相同标签和输入框。

我不知道这样的事情是否可行,但如果不能,请告诉我。另外,我知道我可以在取消选中“选择”state按钮DISABLED时将相关的“输入”框设置为,但是,我希望,如果可能的话,不要显示这些框,以便它们的出现不会使不熟悉这种情况的用户感到困惑。在此之下,需要额外的投入。

如果相关,我在Windows 10 Pro上使用Python 2.7.9,Anaconda
2.2.0(64位)和Tkinter版本81008。如果我遗漏了任何有用的信息,请随时索取更多信息。在此先感谢您提供的任何帮助。


阅读 1070

收藏
2021-01-20

共1个答案

一尘不染

我想你要grid_remove()

http://www.tkdocs.com/tutorial/grid.html

网格的“忘记”方法将一个或多个从属窗口小部件的列表作为参数,可用于从它们当前所在的网格中删除从属。这不会完全破坏小部件,而是将其从屏幕上移开,就好像它最初没有被网格化一样。尽管您最初分配的所有网格选项都将丢失,但是您可以稍后再次对其进行网格化。

网格的“删除”方法的工作原理相同,只是会记住网格选项。

丑陋的例子如下。玩网格选项和输入文本以查看如何保存它们。

def toggle_entry():
    global hidden
    if hidden:
        e.grid()
    else:
        e.grid_remove()
    hidden = not hidden

hidden = False
root = tk.Tk()
e = tk.Entry(root)
e.grid(row=0, column=1)
tk.Button(root, text='Toggle entry', command=toggle_entry).grid(row=0, column=0)
root.mainloop()
2021-01-20