class MixMaster: def stop(self): sys.exit(0) def openmech(self): from tkFileDialog import askopenfilename pathname = askopenfilename(filetypes=[("Cantera Input Files", "*.cti"), ("XML Files", "*.xml *.ctml"), ("All Files", "*.*")]) if pathname: self.loadmech('', pathname) def loadmech(self, mechname, pathname, mw=1): p = os.path.normpath(os.path.dirname(pathname)) self.fname = os.path.basename(pathname) ff = os.path.splitext(self.fname) try: self.mech = IdealGasMix(pathname) self.mechname = ff[0] except: utilities.handleError('could not create gas mixture object: ' +ff[0]+'\n') self.mechname = 'Error' return self.makeMix() if not mechname: mechname = self.mechname self.mechframe.addMechanism(mechname, self.mech) if mw==1: self.makeWindows() def addWindow(self, name, w): """Add a new window, or replace an existing one.""" wstate = '' if self._windows.has_key(name): try: wstate = self._windows[name].master.state() self._windows[name].master.destroy() except: pass else: wstate = 'withdrawn' self._windows[name] = w self._vis[name] = IntVar() if wstate == 'withdrawn': self._windows[name].master.withdraw() else: self._windows[name].show() def update(self): """Update all windows to reflect the current mixture state.""" for w in self._windows.keys(): try: m = self._windows[w].master if m.state() != 'withdrawn': self._windows[w].show() except: pass self.thermo.showState() self.mixfr.show() def makeMix(self): self.mix = Mix(self.mech) nsp = self.mech.nSpecies() self.species = [] nm = self.mech.speciesNames() for k in range(nsp): self.species.append(Species(self.mech, nm[k])) x = self.mech.moleFractions() self.mix.setMoles(x) self.mix.set(temperature = self.mech.temperature(), pressure = self.mech.pressure()) def __init__(self, master=None): """ Create a new Application instance. Usually this is only called once. """ if master: self.master = master else: t = Tk() self.master = t self._windows = {} self._vis = {} self.windows = [] self.cwin = ControlWindow(_app_title,self.master) self.cwin.master.resizable(FALSE,FALSE) self.menubar = Frame(self.cwin, relief=GROOVE,bd=2) self.menubar.grid(row=0,column=0,sticky=N+W+E) self.mixfr = None self.thermo = None self.transport = None self.kinetics = None self.rxndata = None self.rxnpaths = None self.edit = None self.fname = None self.mechframe = MechManager(self.cwin, self) self.mechframe.grid(row=1,column=0,sticky=N+W) fileitems = [('Load Mixture...', self.openmech), ('Import Mechanism File...',self.importfile), 'separator', ('Load Data File...',self.showdata), 'separator', ('Exit', self.stop), [] ] self.filemenu = make_menu('File', self.menubar, fileitems) self.vtherm = IntVar() self.vcomp = IntVar() self.vtran = IntVar() self.vkin = IntVar() self.vrxn = IntVar() self.vrxn.set(0) self.vtherm.set(1) self.vedit = IntVar() dataitems = [(' Import Flame Data', testit), (' Import CSV Data', testit), []] #self.datamenu = make_menu('Data', self.menubar, dataitems) #toolitems = [(' Convert...', self.importfile), # []] #self.toolmenu = make_menu('Tools', self.menubar, toolitems) w = [(' Thermodynamic State', self.showthermo, 'check', self.vtherm), (' Composition', self.showcomp, 'check', self.vcomp), 'separator', (' Kinetics', self.showkinetics, 'check', self.vkin), (' Reactions...', self.showrxns), (' Reaction Paths...', self.showrpaths), []] self.viewmenu = make_menu('Windows', self.menubar, w) self.helpmenu = make_menu('Help', self.menubar, [('About '+_app_title+'...', self.aboutmix), ('About Cantera...', testit), [] ]) # load the preloaded mechanisms for m in _autoload: self.loadmech(m[0],m[1],0) self.makeWindows() self.addWindow('import',ImportFrame(self)) self.vtherm.set(1) self.showthermo() ## self.vcomp.set(1) ## self.showcomp() self.master.iconify() self.master.update() self.master.deiconify() self.cwin.mainloop() def importfile(self): #self.vimport.set(1) w = self._windows['import'] w.show() def makeWindows(self): # if self.mixfr: for w in self.windows: try: w.destroy() except: pass fr = [MixtureFrame, ThermoFrame, TransportFrame] self.mixfr = MixtureFrame(self.cwin, self) self.thermo = ThermoFrame(self.cwin, self) # self.transport = TransportFrame(self.cwin, self) self.kinetics = SpeciesKineticsFrame(self.cwin, self) self.addWindow('rxndata',ReactionKineticsFrame(self.vrxn, self)) self.addWindow('rxnpaths',ReactionPathFrame(self)) self.addWindow('dataset',DataFrame(None, self)) #self.edit = EditFrame(t, self) self.windows = [self.mixfr, self.thermo, self.transport, self.kinetics] self.showthermo() self.showcomp() #self.showtransport() self.showkinetics() #self.showrxns() #self.showrpaths() #self.showdata() if self.mech: self.mechframe.grid(row=1,column=0) else: self.mechframe.grid_forget() #self.showedit() def show(self, frame, vis, row, col): if vis: frame.grid(row=row,column=col,sticky=N+E+S+W) else: frame.grid_forget() def showthermo(self): if self.thermo: self.show(self.thermo, self.vtherm.get(), 7, 0) def showcomp(self): if self.mixfr: self.show(self.mixfr, self.vcomp.get(), 8, 0) def showkinetics(self): if self.kinetics: self.show(self.kinetics, self.vkin.get(), 10, 0) def showrxns(self): self._windows['rxndata'].show() def showrpaths(self): self._windows['rxnpaths'].show() def showdata(self): self._windows['dataset'].browseForDatafile() def aboutmix(self): m = tkMessageBox.showinfo(title = 'About MixMaster', message = """ MixMaster version """+_app_version+""" written by: Prof. David G. Goodwin California Institute of Technology copyright 2003 California Institute of Technology """)
def __init__(self, master=None): """ Create a new Application instance. Usually this is only called once. """ if master: self.master = master else: t = Tk() self.master = t self._windows = {} self._vis = {} self.windows = [] self.cwin = ControlWindow(_app_title,self.master) self.cwin.master.resizable(FALSE,FALSE) self.menubar = Frame(self.cwin, relief=GROOVE,bd=2) self.menubar.grid(row=0,column=0,sticky=N+W+E) self.mixfr = None self.thermo = None self.transport = None self.kinetics = None self.rxndata = None self.rxnpaths = None self.edit = None self.fname = None self.mechframe = MechManager(self.cwin, self) self.mechframe.grid(row=1,column=0,sticky=N+W) fileitems = [('Load Mixture...', self.openmech), ('Import Mechanism File...',self.importfile), 'separator', ('Load Data File...',self.showdata), 'separator', ('Exit', self.stop), [] ] self.filemenu = make_menu('File', self.menubar, fileitems) self.vtherm = IntVar() self.vcomp = IntVar() self.vtran = IntVar() self.vkin = IntVar() self.vrxn = IntVar() self.vrxn.set(0) self.vtherm.set(1) self.vedit = IntVar() dataitems = [(' Import Flame Data', testit), (' Import CSV Data', testit), []] #self.datamenu = make_menu('Data', self.menubar, dataitems) #toolitems = [(' Convert...', self.importfile), # []] #self.toolmenu = make_menu('Tools', self.menubar, toolitems) w = [(' Thermodynamic State', self.showthermo, 'check', self.vtherm), (' Composition', self.showcomp, 'check', self.vcomp), 'separator', (' Kinetics', self.showkinetics, 'check', self.vkin), (' Reactions...', self.showrxns), (' Reaction Paths...', self.showrpaths), []] self.viewmenu = make_menu('Windows', self.menubar, w) self.helpmenu = make_menu('Help', self.menubar, [('About '+_app_title+'...', self.aboutmix), ('About Cantera...', testit), [] ]) # load the preloaded mechanisms for m in _autoload: self.loadmech(m[0],m[1],0) self.makeWindows() self.addWindow('import',ImportFrame(self)) self.vtherm.set(1) self.showthermo() ## self.vcomp.set(1) ## self.showcomp() self.master.iconify() self.master.update() self.master.deiconify() self.cwin.mainloop()