[Tutor] Request for Comments
Michael Lange
klappnase at freenet.de
Thu Jul 29 12:11:57 CEST 2004
On Tue, 27 Jul 2004 11:23:16 -0700
"Faulconer, Steven M." <STEVEN.M.FAULCONER at saic.com> wrote:
> I'd like to have a better way of creating the gui elements. Since there are
> currently 5 checkers, I've got a lengthy bit of code to create the widgets.
> It would be nice to have a method that loops over a data structure
> (dictionary/list) and builds the gui elements from the contents. I'll have
> to work on that for the next version.
>
Hi, Steven,
you currently have five methods in your CheckerApp class that look all the same; I think you might
replace these with a single method like this:
def RunChecker(self, checkerName):
if checker in self.checkerNames:# with self.checkerNames as a list that contains the possible checkers
# Build the commandline sequence
command = self.SSBIN + self.BINPATH + checkerName + self.PROJPATH + \
self.PROJECT + ".prj" + " " + path.joinpath( self.DBPATH, self.DATABASE )
# Build the path to the report file
report = self.DBPATH.joinpath( self.DATABASE ) + ".cnt"
# If the report file exists, remove it. The creation of the report file
# is used to determine if the program ran correctly.
if exists( report ):
remove( report )
# Run the checker command
CheckerWindow( self.newroot, self, checkerName, command, report )
The same should be possible for creating the gui elements if you add a class that contains all the elements you need
for the five checkers:
class CheckerGroup(Tkinter.Frame):
def __init__(self, master, checkerName, **kw):
Tkinter.Frame.__init__(self, master, **kw)
# replace attributes of the CheckerApp class with something appropriate in the code below
self.fnd_dup_group = Pmw.Group( master, tag_text = title )
self.fnd_dup_group.pack( pady = 2, padx = 2, expand = 'yes', fill = 'both' )
self.fnd_dup_run = Tkinter.StringVar()
if self.OPTIONS['find_dup_feat'][ 0 ] == "":
self.fnd_dup_run.set( "Last ran on : Never" )
else:
self.fnd_dup_run.set( "Last ran on : " + self.OPTIONS['find_dup_feat'][ 0 ] )
Tkinter.Label( self.fnd_dup_group.interior(),
textvariable = self.fnd_dup_run ).pack( anchor = Tkinter.W )
self.fnd_dup_btns = Pmw.ButtonBox( self.fnd_dup_group.interior() )
self.fnd_dup_btns.pack( fill = 'both', expand = 'yes', padx = 5, pady = 5 )
self.fnd_dup_btns.add( 'Run Checker',
command = lambda
arg1 = 'find_dup_feat':
self.RunChecker( arg1 ) )
self.fnd_dup_btns.add( 'View Report', command = lambda
arg1 = "find_dup_feat":
self.ViewReport( arg1 ) )
then you could write in the CheckerApp class something like:
self.checkers = {}# collect the CheckerGroups in a dictionary to keep a reference
for checker in self.checkerNames:
newchecker = CheckerGroup(self.newroot, checker)
newchecker.pack()
self.checkers[checker] = newchecker
(now that I've written this I think that maybe a dictionary might be better than a list for self.checkerNames,
and maybe the RunChecker() method should be an attribute of the CheckerGroup class rather than one of CheckerApp;
anyway, I guess you'll see my point.)
I hope this helps
Michael
More information about the Tutor
mailing list