part pack(side=leftexpand=yesfill=bothor pass configs to demo(growstretch with window because the demo classes use their **options arguments to support constructor argumentsthoughwe could configure at creation timetoo for exampleif we change this code as followsit produces the slightly different composite window captured in figure - (stretched bit horizontally for illustrationtooyou can run this as demoall-frm-ridge py in the examples package)def addcomponents(root)for demo in demomodulesmodule __import__(demopart module demo(rootbd= relief=ridgepart pack(side=leftexpand=yesfill=bothimport by name string attachconfig instance growstretch with window because the demo classes both subclass frame and support the usual construction argument protocolsthey become true widgets--specialized tkinter frames that implement an attachable package of widgets and support flexible configuration techniques figure - demoall_frmconfigure when constructed as we saw in attaching nested frames like this is really just one way to reuse gui code structured as classes it' just as easy to customize such interfaces by subclassing rather than embedding herethoughwe're more interested in deploying an existing widget package than changing itso attachment is the pattern we want the next two sections show two other ways to present such precoded widget packages to users--in pop-up windows and as autonomous programs running gui code three ways