::::::::::::::::::::textpak=>spam txt spam spam spam these scripts don' do anything about binary filescompressionor the likebut they serve to illustrate command-line scripts that require arguments when run although they can be launched with shell commands as above (and hence python tools like os popen and subprocess)their logic is also packaged to be imported and called for running them from guiwe'll use the latter direct call interface gui input dialogs one final piece remains as isthe packing and unpacking scripts function well as command-line tools the callback actions named in example - ' mytools py guithoughare expected to do something gui-oriented because the original file packing and unpacking scripts live in the world of text-based streams and shellswe need to code wrappers that accept input parameters from more gui-minded users in particularwe need dialogs that prompt for the command-line arguments required firstthe module in example - and its client script in example - use the custom modal dialog techniques we studied in to pop up an input display to collect pack script parameters the code in example - was split off to separate module because it' generally usefulin factwe will reuse itin both the unpack dialog and again in pyedit in this is yet another way to automate gui construction--using it to build form' rows trades or more lines of code per row ( without linked variable or browse buttonfor just we'll see another even more automatic form building approach in ' form py the utility herethoughis sufficient to shave dozens of lines of code for nontrivial forms example - pp \gui\shellgui\formrows py """create label+entry row framewith optional file open browse buttonthis is separate module because it can save code in other programs toocaller (or callbacks here)retain returned linked var while row is in use""from tkinter import from tkinter filedialog import askopenfilename widgets and presets file selector dialog def makeformrow(parentlabelwidth= browse=trueextend=false)var stringvar(row frame(parentlab label(rowtext=label '?'relief=ridgewidth=widthent entry(rowrelief=sunkentextvariable=varshellguiguis for command-line tools