You are asking a fairly complex question, without showing any working example to demonstrate the problem. It sounds like you are thinking right in needing to repack the whole program. You might see if withdrawing the mainwindow, and raising it again, will force a redraw. But generally, you should try to keep your buttons in a separate frame, then you can packForget the whole frame, rebuild it with new buttons, then pack it again into the $mw. Or use a separate $toplevel, which you can rebuild out of site, without messing with your $mw.