简体   繁体   中英

Showing and Hiding widgets

How do you show and hide widgets in Tkinter? I want to have an entry box, but not have it shown at all times. Can someone show me the functions to show and hide entry widgets and other widgets in tkinter? I want to be able to do this without having multiple frames.

This has been answered before on stackoverflow . The short answer is, you can use grid_remove which will cause the widget to be removed if it was previously added via grid. grid_remove remembers where the widget was, so a simple grid() will put it back without having to re-specify all of the options.

You can also use pack_forget (if using pack) and grid_forget (if using grid). These work similarly to grid_remove except they cause all of the settings to be forgotten, which means you have to explicitly place it back into the proper place on the screen.

Another option is to take advantage of the stacking order of widgets. You can use the lower method to hide the widget behind its parent, and lift to raise it above. See this answer for an example.

I tried the suggestions that others have posted and noticed that I was making a simple mistake. You can't call .grid() on the same line that you declare the widget that you're going to hide.

To clarify, I previously had this:

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

But I got the error AttributeError: 'NoneType' object has no attribute 'grid_remove' . To fix it, I had to make the call to .grid() on a new line, like this:

self.helpExpansion = ttk.Label(self.helpMenu, text="Help Expansion")
self.helpExpansion.grid(row=1, column=3, sticky=EW)
self.helpExpansion.grid_remove()

Then to toggle between showing and hiding, I just alternated between calling self.helpExpansion.grid() (function arguments not needed) and self.helpExpansion.grid_remove() .

For me it worked with both tk.Label or ttk.Label . I'm using Python 2.7.13 . Hope that helps!

For TK grids, I find these two helper functions useful. The first stores the current state of the widget inside the item and then removes it. The second add it back to the grid and restores the state.

def grid_hide(widget):
  widget._grid_info = widget.grid_info()
  widget.grid_remove()

def grid_show(widget):
  widget.grid(**widget._grid_info)

Tested with Python 3.8.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM