如何在Tkinter中显示和隐藏小部件?我想要一个输入框,但不要一直显示它。有人能告诉我在tkinter中显示和隐藏条目小部件和其他小部件的功能吗?我希望能够在没有多个框架的情况下做到这一点。
答案 0 :(得分:22)
This has been answered before on stackoverflow。简而言之,您可以使用grid_remove,如果之前通过网格添加了小部件,则会导致小部件被删除。 grid_remove
会记住窗口小部件的位置,因此简单的grid()
会将其放回原位,而无需重新指定所有选项。
您还可以使用pack_forget(如果使用包)和grid_forget(如果使用网格)。这些工作类似于grid_remove,除了它们会导致忘记所有设置,这意味着你必须将它显式地放回到屏幕上的适当位置。
另一种选择是利用小部件的堆叠顺序。您可以使用lower方法隐藏其父级后面的小部件,并使用lift将其提升到上方。有关示例,请参阅this answer。
答案 1 :(得分:3)
我尝试了其他人发布的建议,并注意到我犯了一个简单的错误。您不能在声明要隐藏的小部件的同一行上调用.grid()
。
为了澄清,我以前有这个:
self.helpExpansion = ttk.Label(self.helpMenu, text="Expansion Widget").grid(row=1, column=3, sticky=EW)
self.helpExpansion.grid_remove()
但我得到了错误AttributeError: 'NoneType' object has no attribute 'grid_remove'
。为了解决这个问题,我不得不在新行上调用.grid()
,如下所示:
self.helpExpansion = ttk.Label(self.helpMenu, text="Help Expansion")
self.helpExpansion.grid(row=1, column=3, sticky=EW)
self.helpExpansion.grid_remove()
然后在显示和隐藏之间切换,我只是在调用self.helpExpansion.grid()
(不需要函数参数)和self.helpExpansion.grid_remove()
之间交替。
对我而言,它适用于tk.Label
或ttk.Label
。我正在使用Python 2.7.13
。希望有所帮助!
答案 2 :(得分:0)
对于TK网格,我发现这两个辅助函数很有用。首先将小部件的当前状态存储在项目内,然后将其删除。第二个将其添加回网格并恢复状态。
def grid_hide(widget):
widget._grid_info = widget.grid_info()
widget.grid_remove()
def grid_show(widget):
widget.grid(**widget._grid_info)
经过Python 3.8测试。