I am attempting to create a program that performs a function given a series of user inputs. Several of the user inputs are only necessary under certain circumstances, and I would like to, if possible, only show the Entry boxes and Labels for those input values when a Checkbutton is selected indicating that the circumstances requiring those inputs are present. What I'm not sure how to do is:
Put the Labels and Entry boxes I'm adding in between rows that already exist.
"Hide" the Labels and Entry boxes when the Checkbutton is deselected, without destroy
ing them, so that they can be displayed again without losing any already-entered data if the Checkbutton is reselected.
"Show" the same Labels and Entry boxes that had previously been "hidden" if the Checkbutton is reselected after having been previously deselcted.
I don't know if something like this is even possible, but if it's not, please let me know. Also, I am aware that I could simply set the relevant Entry boxes' state
to DISABLED
while the Checkbutton is deselected, but I would prefer, if possible, that the boxes not appear so that their presence does not confuse users who are not familiar with the circumstances under which the additional inputs are necessary.
If this is relevant, I am using Python 2.7.9, Anaconda 2.2.0 (64-bit), and Tkinter version 81008 on Windows 10 Pro. Feel free to request further information if I've left anything out that would be useful to know. Thanks in advance for any help you're able to provide.
I think you want grid_remove()
.
From http://www.tkdocs.com/tutorial/grid.html:
The "forget" method of grid, taking as arguments a list of one or more slave widgets, can be used to remove slaves from the grid they're currently part of. This does not destroy the widget altogether, but takes it off the screen, as if it had not been gridded in the first place. You can grid it again later, though any grid options you'd originally assigned will have been lost.
The "remove" method of grid works the same, except that the grid options will be remembered.
Ugly example follows. Play with the grid options and the entry text to see how they are preserved.
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()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With