Neither is intrinsically better than the other. Each have strengths and weaknesses. Learn what those are and the choice of which to use becomes obvious.
grid
is considerably easier to use if you need to lay things out in a grid. pack
is generally easier to use if all you need to do is put some widgets in a single row or single column. There's a whole lot of gray area in-between where neither is necessarily better than the other.
The other thing to consider is what you said in your question: if you want to show and hide widgets at run-time, grid
is probably the best choice because of the grid_remove
method which remembers the values of all of the configured attributes in case you want to re-add the widget.
Personally, my first choice is always to use pack
because I first learned Tk back when there was no grid
command. If I can't do it easily in pack
, or if I'm very clearly laying things out in a grid, I'll use grid
.