I like your idea of using libraries to hide widget definitions. I would even suggest going a step further, and creating wrappers to simplify some of your widget subroutines, since many of them use the same parameters. Here's how I would be inclined to simplify the library module (note btw, that in the call to pack(), you should set the value of -expand to either 0 or nonzero; it's -fill which takes one of "none", "x", or "y", or "both"):