In my experience, I have found that Tk's destroy() method chews up (or leaks) memory. My general practice is never to use destroy() and implement "appearing" and "disappearing" of anything using one of the other methods posted below, especially if this is an app that is going to be changing its state many times in a single execution.
Note: About the grid manager, as seen on node Tk::grid and gridRemove(), gridRemove() and gridForget() are NOT identical :-).