25

你如何在 Tkinter 中显示和隐藏小部件?我想要一个输入框,但不是一直显示它。有人可以向我展示在 tkinter 中显示和隐藏条目小部件和其他小部件的功能吗?我希望能够在没有多个帧的情况下做到这一点。

4

3 回答 3

35

之前在 stackoverflow 上已经回答了这个问题。简短的回答是,您可以使用grid_remove如果之前通过网格添加小部件,它将导致小部件被删除。grid_remove记住小部件的位置,所以一个简单的grid()将它放回去而不必重新指定所有选项。

您还可以使用pack_forget(如果使用 pack)和grid_forget(如果使用 grid)。它们的工作方式与 grid_remove 类似,只是它们会导致忘记所有设置,这意味着您必须明确地将其放回屏幕上的正确位置。

另一种选择是利用小部件的堆叠顺序。您可以使用lower方法将小部件隐藏在其兄弟之后,然后将其提升到上方。有关示例,请参见此答案。

于 2012-04-22T12:50:10.187 回答
6

我尝试了其他人发布的建议,发现我犯了一个简单的错误。您不能.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.Labelttk.Label. 我正在使用 Python 2.7.13。希望有帮助!

于 2017-02-14T19:47:19.010 回答
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 测试。

于 2020-09-16T15:44:49.207 回答