from Tkinter import* import os import Pmw import webbrowser from tkFileDialog import askopenfilename from random import randrange class MenuBar(Frame): def __init__(self, boss): Frame.__init__(self, borderwidth=2) #menu # fileMenu = Menubutton(self , text = 'File') fileMenu.grid(row=0,column=0) me1= Menu(fileMenu) me1.add_command(label ='New', underline =0,command = boss.nouveau) me1.add_command(label ='Open', underline =0, command = boss.ouvrir) me1.add_command(label ='Test', underline =0, command = boss.test) me1.add_command(label ='Number test', underline =0, command = boss.testnum) me1.add_command(label ='Save', underline =0,command = boss.save) execute = Menubutton(self , text = 'Execute') execute.grid(row=0,column=1) me3= Menu(execute) me3.add_command(label='Run', underline =0, command = boss.run) help = Menubutton(self , text = 'Help') help.grid(row=0,column=2) me4=Menu(help) me4.add_command(label='Online documentation' , underline =0, command = boss.doc) me4.add_command(label='GUI for Python', underline=0, command = boss.gui) fileMenu.configure(menu = me1) execute.configure(menu = me3) help.configure(menu = me4) #creation des champs d'entree self.lab=Label(self, text='Proj',fg='red',font=('Comic Sans MS',11)) self.lab.grid(row=7,column=0) self.E_1=Entry(self, textvariable=boss.fichname) self.E_1.grid(row=7,column=1) self.lab=Label(self, text='Output',fg='red', font=('Comic Sans MS',11)) self.lab.grid(row=7,column=3) self.E_2=Entry(self, textvariable=boss.output1) self.E_2.grid(row=7,column=4) self.lab=Label(self, text='Plot',fg='red', font=('Comic Sans MS',11)) self.lab.grid(row=8,column=0) self.E_3=Entry(self, textvariable=boss.plot1) self.E_3.grid(row=8,column=1) self.lab=Label(self, text='Intpar',fg='red', font=('Comic Sans MS',11)) self.lab.grid(row=8,column=3) self.E_4=Entry(self, textvariable=boss.intpar1) self.E_4.grid(row=8,column=4) self.lab=Label(self, text='Doublepar',fg='red', font=('Comic Sans MS',11)) self.lab.grid(row=9,column=0) self.E_5=Entry(self, textvariable=boss.doublepar1) self.E_5.grid(row=9,column=1) self.lab=Label(self, text='ComplexparRe',fg='red', font=('Comic Sans MS',11)) self.lab.grid(row=9,column=3) self.E_6=Entry(self, textvariable=boss.complexpar1) self.E_6.grid(row=9,column=4) self.lab=Label(self, text='ComplexparIm',fg='red', font=('Comic Sans MS',11)) self.lab.grid(row=10,column=0) self.E_7=Entry(self, textvariable=boss.complexpar2) self.E_7.grid(row=10,column=1) #creation des boutons self.bou1=Button(self, text='Run',command=boss.save) self.bou1.grid(row=20,column=2) self.bou2=Button(self, text='Fill',command=boss.ouvrir) self.bou2.grid(row=20,column=6) self.bou3=Button(self, text='Close', command = boss.destroy) self.bou3.grid(row=20,column=10) class Application(Frame): def __init__(self, boss =None): Frame.__init__(self) self.master.title('Resolution of EC2D') self.master.iconbitmap("ofeli.ico") image =('o','d','p','l') texte =('open','save','run','test') #chemin=os.getcwd()+os.sep+"%s" tip= Pmw.Balloon(self) toolbar= Frame(self, bd=1) toolbar.pack(expand=YES, fill=X) nbou= len(image) self.photoI=[NONE]*nbou for b in range(nbou): self.photoI[b]= PhotoImage(file=image[b]+'.gif') bou=Button(toolbar, image=self.photoI[b], relief=GROOVE, command= lambda arg=b:self.action(arg)) bou.pack(side=LEFT) tip.bind(bou, texte[b]) self.fichname=StringVar() self.output1=StringVar() self.plot1=StringVar() self.intpar1=StringVar() self.doublepar1=StringVar() self.complexpar1=StringVar() self.complexpar2=StringVar() self.meshfile1=StringVar() self.auxfile1=StringVar() mBar = MenuBar(self) mBar.pack() self.can = Text(self,state=DISABLED,height=2,fg='black'); self.can.pack() self.pack() def ouvrir(self): name = askopenfilename(filetypes = [("all","*"),("python","*.dat")]) if name: try: fichier = open(name,"r") except: self.message("Error this file can not be opened\n") else: #obtenir le contenu du fichier sous forme d'une liste de lignes L=fichier.readlines() #on ferme le fichier fichier.close() #print L #print #on retir les caracters de fin de ligne'\r' et/ou '\n' L=[x.rstrip('\r\n') for x in L] #on transforme chaque ligne en sous -liste[clé, valeur] L=[x.split() for x in L] #elimine la premiere et derniere ligne L=L[1:-1] #elimine les lignes de commentaires L=[x for x in L if x[0]!="#"] print L a= L[0][1] self.fichname.set(a) b=L[1][1] self.output1.set(b) c=L[2][1] self.plot1.set(c) d=L[3][1] self.intpar1.set(d) e=L[4][1] self.doublepar1.set(e) f=L[5][1] self.complexpar1.set(f) i=L[5][2] self.complexpar2.set(i) g=L[6][1] self.meshfile1.set(g) h=L[7][1] self.auxfile1.set(h) else: self.message("no file selected!") #def saveas(self): def testnum(self): num1=self.output1.get() num2=self.plot1.get() num3=self.intpar1.get() num4=self.doublepar1.get() num5=self.complexpar1.get() num6=self.complexpar2.get() if num1: try: num1=int(num1) except: self.message("illegal caracter in output\n") else: try: num2=int(num2) except: self.message("illegal caracter in plot\n") else: try: num3=int(num3) except: self.message("illegal caracter in intpar\n") else: try: num4=int(num4) except: self.message("illegal caracter in doublepar\n") else: try: num5=int(num5) except: self.message("illegal caracter in complex real part\n") else: try: num6=int(num6) except: self.message("illegal caracter in complex imaginaty part\n") else: self.message("all the numbers are ok\n") def test(self) : fichier1=self.fichname.get() taille1=len(fichier1) fichier2=self.meshfile1.get() taille2=len(fichier2) fichier3=self.auxfile1.get() taille3=len(fichier3) if fichier1: #try: # fich1 = open('%s'%(fichier1),'r') #except: # self.message("the data file can't be opened\n") #else: #if (str(fich1.readline())) != '#PARAM!\n' : # self.message("Error, the written name isn't a datafile\n") # self.E_1.delete(0,taille1) # fich1.close() #else: try: fich2 = open("C:/python24/projet/ofeli/tests/demos/electromagnetics/eddycurrent2d-1/%s"%(fichier2),'r') #'C:/python24/projet/ofeli/tests/demos/electromagnetics/eddycurrent2d-1/%s' except: self.message("the mesh file can't not be opened\n") else: if (str(fich2.readline())) != '#MESH!\n' : self.message("Error, the written name isn't a meshfile\n") self.E_8.delete(0,taille2) #fich2.close() else: try: fich3 = open("C:/python24/projet/ofeli/tests/demos/electromagnetics/eddycurrent2d-1/%s"%(fichier3),'r') #'C:/python24/projet/ofeli/tests/demos/electromagnetics/eddycurrent2d-1/%s' except: self.message("the aux file can't be opened\n") else: if (str(fich3.readline())) != '#MESH!\n' : self.message("Error, the written name isn't a auxfile\n") self.E_9.delete(0,taille3) #fich3.close() else: self.message("you can execute\n") #fich2.close() #fich3.close() def message(self, text): self.can.config(state=NORMAL) self.can.insert(END,text) self.can.config(state=DISABLED) def nouveau(self): a=" project" self.fichname.set(a) b=1 self.output1.set(b) c=1 self.plot1.set(c) d=1 self.intpar1.set(d) e=10 self.doublepar1.set(e) f=10 self.complexpar1.set(f) i=0 self.complexpar2.set(i) g="project.m" self.meshfile1.set(g) h="project.m" self.auxfile1.set(h) file = open("%s"%(a),'w') file.write('#PARAM!\n') file.write('Proj %s\n'%(a)) output = b file.write('Output %s\n'%(b)) plot = c file.write('Plot %s\n'%(c)) #file.write('#Voltage flag\n') intpar = d file.write('IntPar %s\n'%(d)) #file.write('#Angular frenquency\n') doublepar = e file.write('DoublePar %s\n'%(e)) #file.write('#Voltage\n') complexparre= f complexparim= i file.write('ComplexPar %s %s\n'%(f,i)) meshfile = g file.write('MeshFile %s\n'%(g)) auxfile = h file.write('AuxFile %s\n'%(h)) file.write('EOF\n') file.close() def doc(self): webbrowser.open("http://ofeli.net") def gui(self): webbrowser.open("http://infohost.nmt.edu/tcc/help/pubs/tkinter/") def action(self,b): if b==0: self.ouvrir() elif b==1: self.save() elif b==2: self.run() elif b==4: self.test() def save(self) : #file.write('#PARAM!\n') self.E_1.delete(0,taille1) file.write('Proj %s\n'%(name)) output = self.output1.get() file.write('Output %s\n'%(output)) plot = str(self.plot1.get()) file.write('Plot %s\n'%(plot)) #file.write('#Voltage flag\n') intpar = str(self.intpar1.get()) file.write('IntPar %s\n'%(intpar)) #file.write('#Angular frenquency\n') doublepar = str(self.doublepar1.get()) file.write('DoublePar %s\n'%(doublepar)) #file.write('#Voltage\n') complexparre= str(self.complexpar1.get()) complexparim= str(self.complexpar2.get()) file.write('ComplexPar %s %s\n'%(complexparre,complexparim)) meshfile = self.meshfile1.get() file.write('MeshFile %s\n'%(meshfile)) auxfile = self.auxfile1.get() file.write('AuxFile %s\n'%(auxfile)) #file.write('EOF\n') file.close() b=self.fichname.get() os.remove("C:/python24/projet/ofeli/tests/demos/electromagnetics/eddycurrent2d-1/%s"%(self.fichname.get())) def run(self) : name=self.fichname.get() file = open("%s"%(name),'w') os.system("C:/python24/projet/ofeli/bin/ec2d1 C:/python24/projet/%s.dat" %(name)) #"C:/python24/projet/ofeli/bin/ec2d1 C:/python24/projet/ if __name__ == '__main__': app = Application() app.mainloop()