#from http://www.ittc.ku.edu/~niehaus/classes/448-s04/448-standard/simple_gui_examples/sample.py #$Id: sample.py,v 1.2 2004/03/17 04:29:31 mandava Exp $ #This sample program is written as a class. The constructor(the ___init__ #method) is called with a parent widget, to which it adds a #number of child widgets. The constructor starts by creating a Frame widget. #A frame is a simple container, and is in this case used to hold the #button and entry widgets. #use in idle to do code completion ##''' ##from Tkinter import * ##f = Frame(Tk()) ##f.pack(padx=15,pady=15) ## ##etc... ##''' from Tkinter import * import tkMessageBox class App: def __init__(self,parent): f = Frame(parent) self.fModelName = Frame(f) self.lblModelName = Label(self.fModelName, width=18, text="Model Class Name:", justify='left') self.lblModelName.pack(side='left', anchor='w') self.svModelName = StringVar() self.entModelName = Entry(self.fModelName, width=30, text="fModelName", justify='left', textvariable=self.svModelName) self.entModelName.pack(side='left', anchor='w') self.fModelName.pack(fill=X, pady=5) self.fInstanceName = Frame(f) self.lblInstanceName = Label(self.fInstanceName, width=18, text="Model Instance Name:", justify='left') self.lblInstanceName.pack(side='left', anchor='w') self.svInstanceName = StringVar() self.entInstanceName = Entry(self.fInstanceName, width=30, text="fInstanceName", justify='left', textvariable=self.svInstanceName) self.entInstanceName.pack(side='left', anchor='w') self.fInstanceName.pack(fill=X, pady=5) self.fFieldDefinitions = LabelFrame(f) self.lblFieldDefinitions = Label(self.fFieldDefinitions, text="Field Definitions") self.lblFieldDefinitions.pack() self.svFieldDefinitions = StringVar() self.txtFieldDefinitions = Text(self.fFieldDefinitions,height=15,width=72,background='white') self.txtFieldDefinitions.pack() self.fFieldDefinitions.pack(fill=X, pady=5) self.fButtons = LabelFrame(f) #self.btnPrint = Button(f, text="print",command=self.print_stuff) #self.btnPrint.pack(side='left', anchor='w',padx=10) self.btnReset = Button(f, text="reset",command=self.reset) self.btnReset.pack(side='left', anchor='w',padx=10) self.btnMake = Button(f, text="make",command=self.make) self.btnMake.pack(side='left', anchor='w',padx=10) self.btnExit = Button(f, text="exit", command=f.quit) self.btnExit.pack(side='left', anchor='w',padx=10) self.fButtons.pack(pady=10) f.pack(padx=10,pady=10) ## def print_stuff(self): ## print "self is to be printed" + self.modelName.get() def reset(self): self.svModelName.set('') self.svInstanceName.set('') self.txtFieldDefinitions.delete(1.0, END) def make(self): #tkMessageBox.showinfo("Joe Message", "I'm working on the make function") # get the strings mainParamS & modelsParamS f = open('mainParam.py', 'r'); mainParamS = f.read(); f.close() f = open('modelsParam.py', 'r'); modelsParamS = f.read(); f.close() #substitute the fieldDefinitions for the * (between the class defs) in the modelS regex pattern import re pattern = r"#beginFieldDefs*#endFieldDefs" replacement = r"beginFieldDefs\n" + reindent(txtFieldDefinitions.get(1.0, END), 2) + r"\n #endFieldDefs" modelsS = re.sub(pattern, replacement, modelsS) #substitute the GUI arguments for the parameters in the strings mainS = mainParamS.replace('zyx_ModelClassName_xyz', self.entModelName.get()) mainS = mainS.replace('zyx_ModelInstanceName_xyz', self.entInstanceName.get()) modelsS = modelsParamS.replace('zyx_ModelClassName_xyz', self.entModelName.get()) # AS YET no instance names in modelsParam.py #write the substituted strings f = open('main.py', 'w'); f.write(mainS); f.close() f = open('models.py', 'w'); f.write(modelsS); f.close() def reindent(self, s, numSpaces): s = string.split(s, '\n') s = [(numSpaces * ' ') + string.lstrip(line) for line in s] s = string.join(s, '\n') return s root = Tk() root.title('Model-View Maker') app = App(root) root.mainloop()