显示和隐藏小部件

udp*_*til 19 python user-interface tkinter

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

Bry*_*ley 27

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

您还可以使用pack_forget(如果使用pack)和grid_forget(如果使用网格).这些工作与grid_remove类似,只是它们会导致忘记所有设置,这意味着您必须将其显式放回屏幕上的适当位置.

另一种选择是利用小部件的堆叠顺序.您可以使用较低的方法隐藏其父窗口后面的窗口小部件,然后抬起以将其抬高.请参阅此答案以获取示例.

  • 您知道对此有何注意事项吗?在Python 3.x中,如果我使用grid_remove,小部件将按预期删除,但网格不会使其返回(显然,无论如何,如果它返回)。我想知道是否需要使用 columnconfigure 做一些复杂的事情才能显示它。 (2认同)

Oli*_*ork 6

我尝试了其他人发布的建议,并注意到我犯了一个简单的错误。您不能.grid()在声明要隐藏的小部件的同一行上调用。

为了澄清,我以前有这个:

self.helpExpansion = ttk.Label(self.helpMenu, text="Expansion Widget").grid(row=1, column=3, sticky=EW)
self.helpExpansion.grid_remove()
Run Code Online (Sandbox Code Playgroud)

但我得到了错误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()
Run Code Online (Sandbox Code Playgroud)

然后在显示和隐藏之间切换,我只是在调用self.helpExpansion.grid()(不需要函数参数)和self.helpExpansion.grid_remove().

对我来说,它适用于两者tk.Labelttk.Label。我正在使用 Python 2.7.13。希望有帮助!

  • 这样做的原因是,您实际上是将调用的返回值分配给 grid(),它返回 None,而不是将 Label 引用分配给 self.helpExpansion。将对 grid() 的调用添加到对小部件构造函数的调用是一种方便的简写,但前提是您以后不需要对该小部件的引用(例如固定标签,或者当您通过以下任一方式与小部件交互时)特殊的 tk 变量或通过回调)。 (4认同)