source: branches/GUIdev/Original Trial Files (9 December 2013)/ParameterEdit7.py @ 1441

Last change on this file since 1441 was 1306, checked in by KelvinHsu, 11 years ago

Initial commit of early python tests

File size: 9.6 KB
Line 
1#-------------------------------------------------------------------------------
2# Name:        ParameterEdit7
3# Purpose:
4#
5# Author:      Kelvin
6#
7# Created:     4/12/2013
8#-------------------------------------------------------------------------------
9
10# Note to self: Make this program more modular and readable by splitting it into distinct parts and use perhaps use functions to implement them.
11# Note to self: Python can also be made into multi-file programs, so that it looks neater. Use 'import' to achieve that.
12
13
14# Define the file names involved.
15defaultParamFileName = '/u/hsu004/IntroToDuchamp/duchampDefaultParameters'
16userSpecifiedFileName = '/u/hsu004/IntroToDuchamp/duchampHIPASS.in'
17
18newFileDirectory = '/u/hsu004/Kelvin/'
19newFileName = 'duchampHIPASSedited.in'
20newFilePath = newFileDirectory + newFileName
21
22
23# Define a simple function to determine the user's intent.
24# Note that this may be very inefficient.
25YES = 1
26NO = 0
27INVALID = -1
28def toEdit(response):
29    if (response == 'y') | (response == 'Y') | (response == 'yes'):
30        return(YES)
31    elif (response == 'n') | (response == 'N') | (response == 'no'):
32        return(NO)
33    else:
34        return(INVALID)
35
36   
37# Define a function to read parameter files with the specified format.
38def readParamFile(paramFileName):
39
40    # Initialise an empty Dictionary.
41    parameters = {}
42
43    # Open the given parameter file.
44    paramFile = open(paramFileName)
45
46    # Load files for lines of parameter data in the specified format and
47    # store them into the dictionary.
48    for line in paramFile:
49        if line[0] != '#' and len(line) > 1:
50            linebits = line.split()
51            parameters[linebits[0]] = linebits[1]
52
53    # Go back to the start of the file.
54    paramFile.seek(0, 0)
55
56    paramFile.close()
57
58    return parameters
59
60# Define a function to create a parameter file with the specified format.
61def writeParamFile(newParamFileName, parameters):
62
63    # Create a new file.
64    newParamFile = open(newParamFileName, 'w')
65
66    # Write the editted set of parameters into the new file.
67    for par in parameters:
68        newParamFile.write('%s    %s\n'%(par, parameters[par]))
69
70    newParamFile.close();
71
72# Define a function to print a list of parameters listed in a dictionary.
73def listParameters(parameters):
74
75    for par in parameters:
76        print(par, parameters[par])
77       
78    print('\n')
79
80# Firstly, determine the default list of parameters
81defaultParameters = readParamFile(defaultParamFileName)   
82
83# Then, determine the user specified list of parameters
84userSpecifiedParameters = readParamFile(userSpecifiedFileName)
85       
86#-------------------------------------------------------------------------------
87# GUI - Tkinter section
88from Tkinter import *
89 
90class mainInterface:
91 
92    def __init__(self, master):
93
94        self.frame = Frame(master)
95       
96        self.frame.grid()
97
98        self.parameterLabel = Label(self.frame, text = "Parameter: ", foreground = "Blue")
99        self.parameterLabel.grid(row = 1, column = 1, columnspan = 2)
100
101        self.valueLabel = Label(self.frame, text = "Value: ", foreground = "Green")
102        self.valueLabel.grid(row = 1, column = 3, columnspan = 2)
103
104        self.parameterEntry = Entry(self.frame, width = 25)
105        self.parameterEntry.grid(row = 2, column = 1, padx = 10, columnspan = 2)
106
107        self.valueEntry = Entry(self.frame, width = 25)
108        self.valueEntry.grid(row = 2, column = 3, padx = 10, columnspan = 2)
109
110        self.checkButton = Button(self.frame, text = "Check", command = self.checkParameter)
111        self.checkButton.grid(row = 3, column = 1, padx = 10, pady = 10)
112
113        self.updateButton = Button(self.frame, text = "Update", command = self.updateParameter)
114        self.updateButton.grid(row = 3, column = 2, padx = 10, pady = 10)
115
116        self.listDefault = Button(self.frame, text = "List Default Parameters", command = self.listDefaultParameters)
117        self.listDefault.grid(row = 4, column = 1, padx = 10, columnspan = 2)
118
119        self.listSpecified = Button(self.frame, text = "List User Specified Parameters", command = self.listSpecifiedParameters)
120        self.listSpecified.grid(row = 5, column = 1, padx = 10, columnspan = 2)
121
122        self.promptSaveButton = Button(self.frame, text = "Save", command = self.promptSaveParameter)
123        self.promptSaveButton.grid(row = 4, column  = 4, padx = 20, pady = 10, sticky = E)
124       
125        self.buttonQUIT = Button(self.frame, text = "QUIT", fg = "red", command = self.frame.quit)
126        self.buttonQUIT.grid(row = 5, column = 4, padx = 20, pady = 10, sticky = E)
127
128       
129
130        self.resultTitle = StringVar()
131           
132        self.result = StringVar()
133
134        self.notesTitle = StringVar()
135
136        self.notes = StringVar()
137
138       
139        # New File Name
140        self.newParamFileDirectory = StringVar()
141
142        self.newParamFileName = StringVar()
143
144        self.newParamFilePath = StringVar()
145
146    def checkParameter(self):
147
148        parameter2check = self.parameterEntry.get()
149
150        if parameter2check in userSpecifiedParameters:
151            value = userSpecifiedParameters[parameter2check]
152            paramInfo = parameter2check + ': ' + value
153            color = "Green"
154            defaultYN = "No"
155        elif parameter2check in defaultParameters:
156            value = defaultParameters[parameter2check]
157            paramInfo = parameter2check + ': ' + value
158            color = "Green"
159            defaultYN = "Yes"
160        else:
161            value = "N/A"
162            paramInfo = '"' + parameter2check + '" does not exist.'
163            color = "Red"
164            defaultYN = "N/A"
165
166        self.resultTitle.set("Parameter Information")
167        self.result.set(paramInfo)
168        self.notesTitle.set("Default Parameter?")
169        self.notes.set(defaultYN)
170       
171        self.resultLabel = Label(self.frame, textvariable = self.resultTitle)
172        self.resultLabel.grid(row = 1, column = 5, padx = 10, columnspan = 2)
173       
174        self.resultValue = Label(self.frame, textvariable = self.result, foreground = color)
175        self.resultValue.grid(row = 2, column = 5, padx = 10, columnspan = 2)
176
177        self.valueEntry.delete(0, END)
178        self.valueEntry.insert(0, value)
179
180        self.notesLabel = Label(self.frame, textvariable = self.notesTitle)
181        self.notesLabel.grid(row = 1, column = 7, padx = 10)
182
183        self.notesValue = Label(self.frame, textvariable = self.notes)
184        self.notesValue.grid(row = 2, column = 7, padx = 10)
185
186    def updateParameter(self):
187
188        parameter2update = self.parameterEntry.get()
189       
190        if parameter2update in userSpecifiedParameters:
191            value2write = self.valueEntry.get()
192            userSpecifiedParameters[parameter2update] = value2write
193            paramInfo = parameter2update + ': ' + value2write
194            newParamYN = "Updated parameter in user specified parameter list"
195        elif parameter2update in defaultParameters:
196            value2write = self.valueEntry.get()
197            userSpecifiedParameters[parameter2update] = value2write
198            paramInfo = parameter2update + ': ' + value2write
199            newParamYN = "Added new parameter in user specified parameter list."
200        else:
201            paramInfo = '"' + parameter2update + '" does not exist.'
202            newParamYN = "-"
203
204        self.resultTitle.set("Parameter Information")
205        self.result.set(paramInfo)
206        self.notesTitle.set("Notes")
207        self.notes.set(newParamYN)
208
209        self.resultLabel = Label(self.frame, textvariable = self.resultTitle)
210        self.resultLabel.grid(row = 1, column = 5, padx = 10, columnspan = 2)
211       
212        self.resultValue = Label(self.frame, textvariable = self.result)
213        self.resultValue.grid(row = 2, column = 5, padx = 10, columnspan = 2)
214
215        self.notesLabel = Label(self.frame, textvariable = self.notesTitle)
216        self.notesLabel.grid(row = 1, column = 7, padx = 10)
217
218        self.notesValue = Label(self.frame, textvariable = self.notes)
219        self.notesValue.grid(row = 2, column = 7, padx = 10)
220
221    def listDefaultParameters(self):
222        listParameters(defaultParameters)
223
224    def listSpecifiedParameters(self):
225        listParameters(userSpecifiedParameters)
226
227    def promptSaveParameter(self):
228
229        self.directoryLabel = Label(self.frame, text = "Directory: ")
230        self.directoryLabel.grid(row = 3, column = 5, padx = 20, pady = 10)
231       
232        self.newFileDirectoryEntry = Entry(self.frame, width = 25)
233        self.newFileDirectoryEntry.grid(row = 3, column = 6, padx = 20, pady = 10)
234
235        self.nameLabel = Label(self.frame, text = "File Name: ")
236        self.nameLabel.grid(row = 4, column = 5, padx = 20, pady = 10)
237
238        self.newFileDirectoryEntry.delete(0, END)
239        self.newFileDirectoryEntry.insert(0, newFileDirectory)
240
241        self.newFileNameEntry = Entry(self.frame, width = 25)
242        self.newFileNameEntry.grid(row = 4, column = 6, padx = 20, pady = 10)
243
244        self.newFileNameEntry.delete(0, END)
245        self.newFileNameEntry.insert(0, newFileName)
246
247        self.saveButton = Button(self.frame, text = "Save to file", command = self.saveParameter)
248        self.saveButton.grid(row = 5, column  = 6, padx = 20, pady = 10, sticky = E)
249
250    def saveParameter(self):
251
252        self.newFilePath = self.newFileDirectoryEntry.get() + self.newFileNameEntry.get()
253       
254        writeParamFile(self.newFilePath, userSpecifiedParameters)
255       
256
257
258       
259
260       
261       
262       
263 
264def main():
265    root = Tk()
266    root.wm_title("Duchamp Parameters")
267 
268    interface = mainInterface(root)
269
270 
271    root.mainloop()
272    root.destroy()
273
274#-------------------------------------------------------------------------------     
275   
276##def main():
277##    editParameter()
278##    checkParameter()
279   
280if __name__ == '__main__':
281    main()
Note: See TracBrowser for help on using the repository browser.