# -*- coding: iso-8859-15 -*- import Tkinter as tk from PTE import * from pylab import * from numpy import zeros import os Edict = dict() Ebuttons = list() i=0 points = [] spline = 0 tag1 = "theline" Econtrol = 0 ############################################################################## # PTE window #PTE = tk.Tk() #PTE.title('Periodic Table of Elements') ############################################################################## # Element callback def elem_callback(x, edict , ebutton, Labelmass, LabelZ, Labelname, Labelsymbol, Entrymass, EntryZ, Entryname, Entrysymbol): PTable(edict[x] , ebutton[x], Labelmass, LabelZ, Labelname, Labelsymbol, Entrymass, EntryZ, Entryname, Entrysymbol) ############################################################################## # Element selection def elem_select(i, button, Labelmass, LabelZ, Labelname, Labelsymbol, LabelLS, Entrymass, EntryZ, Entryname, Entrysymbol,EntryLS): global Econtrol, Edict, methodvar button[Econtrol]['relief']='raised' Econtrol = i button[i]['relief']='sunken' Labelmass.configure(text = 'Mass - %f' %Edict[i]['mass']) LabelZ.configure(text = 'Z - %f' %Edict[i]['Z']) Labelname.configure(text = '%s' %Edict[i]['name']) Labelsymbol.configure(text = 'Symbol - %s' %Edict[i]['symbol']) LabelLS.configure(text = 'Line Shape α - %f' %Edict[i]['LineShape']) Entrymass.delete (0, len(Entrymass.get())) Entryname.delete (0, len(Entryname.get())) EntryZ.delete (0, len(EntryZ.get())) Entrysymbol.delete (0, len(Entrysymbol.get())) EntryLS.delete (0, len(EntryLS.get())) Entrymass.insert(0, Edict[int(Econtrol)]['mass']) Entryname.insert(0, Edict[int(Econtrol)]['name']) EntryZ.insert(0, int(Edict[int(Econtrol)]['Z'])) Entrysymbol.insert(0, Edict[int(Econtrol)]['symbol']) EntryLS.insert(0, Edict[int(Econtrol)]['LineShape']) ############################################################################## # Init def ewin_build(window, xmax, xstep): ############################################################################## # Element addition def create(): global i, Edict, Ebuttons Edict[i] = dict(name = "Element X", symbol = "Hf", mass = 178.00, Z = 72, dist = zeros(int(xmax/xstep)), control = 0, LineShape = 200.) Ebuttons.insert(i, tk.Button(Eframe, text=i, width=1, height=1, command = lambda i=i : elem_select(i,Ebuttons,Labelmass,LabelZ,Labelname,Labelsymbol,LabelLS,Entrymass,EntryZ,Entryname,Entrysymbol,EntryLS))) Ebuttons[i].grid(column = ((len(Ebuttons)-1)%15), row = int(math.floor((len(Ebuttons)-1)/15))) i=i+1 ############################################################################## # Element deletion def remove(): global i, Edict, Ebuttons, Econtrol if i > 1: i=i-1 del Edict[i] Ebuttons[i].destroy() del Ebuttons[i] if Econtrol == i: Econtrol = Econtrol -1 Ebuttons[Econtrol]['relief']='sunken' ############################################################################## # Element Frames Labelprop = tk.LabelFrame(window, text = 'Properties', relief='raised', bd=2) Labelprop.pack(side = 'top') Label1 = tk.LabelFrame(window, text = 'Elements', relief='raised', bd=2) Label1.pack(side = 'top') Eframe = tk.Canvas(Label1) Eframe.pack(fill='both',expand=0) ############################################################################## # Init create() ############################################################################## # Properties global Econtrol, Edict def update(i): Edict[i]['mass'] = float(Entrymass.get()) Labelmass.configure(text = 'Mass - %f' %Edict[i]['mass']) Edict[i]['Z'] = float(EntryZ.get()) LabelZ.configure(text = 'Z - %f' %Edict[i]['Z']) Edict[i]['name'] = str(Entryname.get()) Labelname.configure(text = '%s' %Edict[i]['name']) Edict[i]['symbol'] = str(Entrysymbol.get()) Labelsymbol.configure(text = 'Symbol - %s' %Edict[i]['symbol']) Edict[i]['LineShape'] = float(EntryLS.get()) LabelLS.configure(text = 'Line Shape α - %f' %Edict[i]['LineShape']) Edict[i]['dist'] = np.loadtxt(Edict[i]['symbol']+".prof") print Edict[i] LpFrame1 = tk.Frame(Labelprop) LpFrame1.pack(side='left') LpFrame2 = tk.Frame(Labelprop) LpFrame2.pack(side='top') LpFrame3 = tk.Frame(Labelprop) LpFrame3.pack(side='right') EPframel = tk.Frame(LpFrame1) EPframel.pack(side='left') EPframee = tk.Frame(LpFrame1) EPframee.pack(side='right') EPframel2 = tk.Frame(LpFrame2) EPframel2.pack(side='left') EPframee2 = tk.Frame(LpFrame2) EPframee2.pack(side='right') Labelname = tk.Label(EPframel, width=26, pady=2, text='%s' %Edict[int(Econtrol)]['name']) Labelmass = tk.Label(EPframel, width=26, pady=2, text='Mass - %f' %Edict[int(Econtrol)]['mass']) LabelZ = tk.Label(EPframel, width=26, pady=2, text='Z - %f' %Edict[int(Econtrol)]['Z']) Labelsymbol = tk.Label(EPframel, width=26, pady=2, text= 'Symbol - %s' %Edict[int(Econtrol)]['symbol']) LabelLS = tk.Label(EPframel, width=26, pady=2, text='Line Shape α - %f' %Edict[int(Econtrol)]['LineShape']) Labelname.pack() Labelmass.pack() LabelZ.pack() Labelsymbol.pack() LabelLS.pack() Entryname = tk.Entry(EPframee, width=18) Entrymass = tk.Entry(EPframee, width=18) EntryZ = tk.Entry(EPframee, width=18) Entrysymbol = tk.Entry(EPframee, width=18) EntryLS = tk.Entry(EPframee, width=18) Entryname.pack() Entrymass.pack() EntryZ.pack() Entrysymbol.pack() EntryLS.pack() methodvar = tk.StringVar() methodvar.set('reta') ############################################################################## # Buttons but = tk.Button(EPframel2, command=create, text='Add element', bd=1, height=1,width=15) but.pack()#side='left') butrmv = tk.Button(EPframel2, command=remove, text='Remove element', bd=1, height=1,width=15) butrmv.pack()#side='right') butPTE = tk.Button(EPframel2, text='Show PTE', bd=1, width=15, command=lambda i=i :elem_callback(Econtrol,Edict,Ebuttons,Labelmass,LabelZ,Labelname,Labelsymbol,Entrymass,EntryZ,Entryname,Entrysymbol)) butPTE.pack()#side='left') BUpdate = tk.Button(EPframel2, text ='Update properties', command=lambda i=int(Econtrol) :update(Econtrol), width=15) BUpdate.pack()#side='right') BUpdateD = tk.Button(EPframel2, text ='Distribution', command =lambda i=int(Econtrol) : os.system("python profiler.py %s %s &" %( Edict[int(Econtrol)]['symbol'], str(methodvar.get()) ) ), width=15) BUpdateD.pack()#side='left') ############################################################################## # Interpolation methods RS = tk.Radiobutton(Labelprop, text="Step", variable=methodvar, value='step') RS.pack() RL = tk.Radiobutton(Labelprop, text="Lines", variable=methodvar, value='reta') RL.pack() ############################################################################## # Init RS.select() Ebuttons[0].invoke() ##############################################################################