#!/usr/bin/python """\ Toy code for a molecular editor. Copyright (c) 2001, Richard P. Muller and William A. Goddard, III All Rights Reserved. Part of the Python Short Course """ from Tkinter import * import string class Editor(Frame): def __init__(self): self.mol = [] self.mol_name = 'DefaultMolecule' self.geo_opt = 0 self.basis = '6-31G**' self.qm_level = 'B3LYP' self.qm_charge = 0.0 self.qm_spin_mult = 1 Frame.__init__(self) self.master.title('MPDB Molecular Editor') self.master.iconname("Editor") self.makeWidgets() return def makeWidgets(self): frame = Frame(self) self.makeMenuBar(frame) self.makeLogo(frame) self.makeMolEdit(frame) self.makeNameEntry(frame) self.makeSelectQM(frame) #frame.pack() self.pack() return def makeLogo(self,frame): f1 = Frame(frame) Label(f1,text="Materials Properties Data Base Molecular Editor", foreground='blue').pack(side=TOP) f1.pack(side=TOP) def makeSelectQM(self,frame): f = Frame(frame) f1 = Frame(f) Label(f1,text='Basis').pack(side=LEFT) r321 = Radiobutton(f1,text='3-21G',value = '3-21G', variable=self.basis) r321.pack(side=LEFT) r631 = Radiobutton(f1,text='6-31G**',value = '6-31G**', variable=self.basis) r631.pack(side=LEFT) rlacvp = Radiobutton(f1,text='LACVP',value = 'LACVP', variable=self.basis) rlacvp.pack(side=LEFT) r631.select() f1.pack(side=TOP,fill=X) f2 = Frame(f) Label(f2,text='Level').pack(side=LEFT) hf = Radiobutton(f2,text='HF',value = 'HF', variable=self.qm_level) hf.pack(side=LEFT) b3lyp = Radiobutton(f2,text='B3LYP',value = 'B3LYP', variable=self.qm_level) b3lyp.pack(side=LEFT) bp86 = Radiobutton(f2,text='BP86',value = 'BP86', variable=self.qm_level) bp86.pack(side=LEFT) pw91 = Radiobutton(f2,text='PW91',value = 'PW91', variable=self.qm_level) pw91.pack(side=LEFT) b3lyp.select() f2.pack(side=TOP,fill=X) f3 = Frame(f) Checkbutton(f3,text='Optimize Geometry?',state = NORMAL, variable = self.geo_opt).pack(side=LEFT) f3.pack(side=TOP,fill=X) f4 = Frame(f) Label(f4,text='Charge').pack(side=LEFT) Entry(f4,width=5,textvariable=self.qm_charge).pack(side=LEFT) Label(f4,text='Spin Multiplicity').pack(side=LEFT) Entry(f4,width=5,textvariable=self.qm_spin_mult).pack(side=LEFT) f4.pack(side=TOP,fill=X) f.pack(side=TOP) def makeNameEntry(self,frame): f1 = Frame(frame) Label(f1,text = 'Name').pack(side=LEFT) e = Entry(f1,width=40,textvariable = self.mol_name) e.pack(side=LEFT) e.insert(0,self.mol_name) f1.pack(side=TOP,fill=Y) def makeMolEdit(self,frame): textfr = Frame(frame) self.text = Text(textfr,height=10,width=50) scroll = Scrollbar(textfr,command = self.text.yview) self.text.configure(yscrollcommand=scroll.set) self.text.pack(side=LEFT) scroll.pack(side=RIGHT,fill=Y) textfr.pack(side=TOP) return def makeMenuBar(self,frame): menubar = Frame(frame,relief=RAISED,borderwidth=1) menubar.pack(side=TOP) mb_file = Menubutton(menubar, text='File') mb_file.pack(side=LEFT) mb_file.menu = Menu(mb_file) mb_file.menu.add_command( label='New...', command = self.new_mol) mb_file.menu.add_command( label='Open...', command = self.open_mol) mb_file.menu.add_command( label='Save...', command = self.save_mol) mb_file.menu.add_command( label='Quit', command = self.quit) mb_file['menu'] = mb_file.menu mb_edit = Menubutton(menubar, text='Edit') mb_edit.pack(side=LEFT) mb_help = Menubutton(menubar, text='Help') mb_help.pack(side=RIGHT) menubar.tk_menuBar(mb_file,mb_edit,mb_help) return def new_mol(self): return def open_mol(self): return def save_mol(self): self.mol = [] text = self.text.get(0.0,END) lines = string.split(text,'\n') for line in lines: words = string.split(line) if len(words) < 4: break sym = words[0] x,y,z = eval(words[1]),eval(words[2]),eval(words[3]) self.mol.append(sym,x,y,z) return Editor().mainloop()