source: branches/GUIdev/Original Trial Files (9 December 2013)/ParameterEdit6.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: 12.3 KB
Line 
1#-------------------------------------------------------------------------------
2# Name:        ParameterEdit6
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'
16oldParamFileName = '/u/hsu004/IntroToDuchamp/duchampHIPASS.in'
17newParamFileName = '/u/hsu004/Kelvin/duchampHIPASSedited.in'
18userSpecifiedParamFileName = newParamFileName
19edittedParamFileName = '/u/hsu004/Kelvin/duchampHIPASSeditedNEW.in'
20
21
22# Define a simple function to determine the user's intent.
23# Note that this may be very inefficient.
24YES = 1
25NO = 0
26INVALID = -1
27def toEdit(response):
28    if (response == 'y') | (response == 'Y') | (response == 'yes'):
29        return(YES)
30    elif (response == 'n') | (response == 'N') | (response == 'no'):
31        return(NO)
32    else:
33        return(INVALID)
34
35   
36# Define a function to read parameter files with the specified format.
37def readParamFile(paramFileName):
38
39    # Initialise an empty Dictionary.
40    parameters = {}
41
42    # Open the given parameter file.
43    paramFile = open(paramFileName)
44
45    # Load files for lines of parameter data in the specified format and
46    # store them into the dictionary.
47    for line in paramFile:
48        if line[0] != '#' and len(line) > 1:
49            linebits = line.split()
50            parameters[linebits[0]] = linebits[1]
51
52    # Go back to the start of the file.
53    paramFile.seek(0, 0)
54
55    paramFile.close()
56
57    return parameters
58
59# Define a function to create a parameter file with the specified format.
60def writeParamFile(newParamFileName, parameters):
61
62    # Create a new file.
63    newParamFile = open(newParamFileName, 'w')
64
65    # Write the editted set of parameters into the new file.
66    for par in parameters:
67        newParamFile.write('%s    %s\n'%(par, parameters[par]))
68
69    newParamFile.close();
70
71# Define a function to print a list of parameters listed in a dictionary.
72def listParameters(parameters):
73
74    for par in parameters:
75        print(par, parameters[par])
76       
77    print('\n')
78
79# Firstly, determine the default list of parameters
80defaultParameters = readParamFile(defaultParamFileName)   
81
82# Then, determine the user specified list of parameters
83userSpecifiedParameters = readParamFile(userSpecifiedParamFileName)
84       
85# This is the function that defines the shell interface
86# which prompts the user with options to edit the parameters in a given file.
87def editParameter():
88   
89    # Firstly, determine the default list of parameters
90    defaultParameters = readParamFile(defaultParamFileName)
91
92    # Display the default set of parameters.
93    print('Original set of Parameters: \n')
94    listParameters(defaultParameters)
95
96    parameters = readParamFile(oldParamFileName)
97
98    # Display the original set of parameters.
99    print('Original set of Parameters: \n')
100    listParameters(parameters)
101
102    # Prompt the user about whether they want to edit any parameters.
103    keepEditting = raw_input('\nWould you like to edit any of the parameters? (Type "y" for yes): ')
104
105    # This handles the case when no parameters are to be editted.
106    if toEdit(keepEditting) == NO:
107        print('\nNo parameters will be editted.')
108       
109    if toEdit(keepEditting) == INVALID:
110        keepEditting = raw_input('\nInvalid Input. Did you mistype something? Did you want to edit any of the parameters? (Type "y" for yes): ')
111
112
113    # This handles the case when the parameters are to be editted.
114    while toEdit(keepEditting) == YES:
115
116        # Prompt the user for the parameter name.
117        parameter2edit = raw_input('\nWhich parameter would you like to edit? \n\tParameter: ')
118
119        # If the parameter exists, edit the parameter value.
120        # Note that the value is always stored as a string, even if the value is a 'number'.
121        if parameter2edit in parameters:
122
123            oldValue = parameters[parameter2edit]
124            newValue = raw_input('\nPlease enter a new value or setting for "' + parameter2edit + '": ')
125            parameters[parameter2edit] = newValue
126            print('\n"' + parameter2edit + '" has been updated from ' + str(oldValue) + ' to ' + str(newValue) + '!')
127
128        # Otherwise, if no such parameters exist, tell the user.   
129        else:
130            print('\nThere is no such parameter as "' +  parameter2edit + '" in your file "' + oldParamFileName + '"')
131
132        # Prompt the user again if editting is to be continued.
133        keepEditting = raw_input('\nWould you like to edit any other parameters? (Type "y" for yes): ')
134
135        # Sometimes people mistype...
136        if toEdit(keepEditting) == INVALID:
137            keepEditting = raw_input('\nInvalid Input. Did you mistype something? Would you like to edit any other parameters? (Type "y" for yes): ')
138
139    # Let the user know that the editting process has ended.
140    if toEdit(keepEditting) == NO:
141        print('\nFinished Editting.')
142    elif toEdit(keepEditting) == INVALID:
143        print('\nInvalid Input. No parameters will be editted.')
144       
145
146    # Display the editted set of parameters.
147    print('\nEditted set of Parameters: \n');
148    listParameters(parameters)
149       
150    writeParamFile(newParamFileName, parameters)
151
152# This is the function that checks the parameter value of a given parameter.
153def checkParam():
154
155    # Firstly, determine the default list of parameters
156    defaultParameters = readParamFile(defaultParamFileName)   
157
158    # Then, determine the user specified list of parameters
159    userSpecifiedParameters = readParamFile(userSpecifiedParamFileName)
160
161    parameter2check = raw_input('\nWhich parameter would you like to check? \n\tParameter: ')
162
163    if parameter2check in userSpecifiedParameters:
164        print(parameter2check + ': ' + userSpecifiedParameters[parameter2check])
165    elif parameter2check in defaultParameters:
166        print(parameter2check + ': ' + defaultParameters[parameter2check])
167    else:
168        print('\n"' + parameter2check + '" does not exist.')
169
170#-------------------------------------------------------------------------------
171# GUI - Tkinter section
172from Tkinter import *
173 
174class mainInterface:
175 
176    def __init__(self, master):
177
178        self.frame = Frame(master)
179       
180        self.frame.grid()
181
182        self.parameterLabel = Label(self.frame, text = "Parameter: ", foreground = "Blue")
183        #self.parameterLabel.pack()
184        #self.parameterLabel.place(x = 0.10, y = 0.10)
185        self.parameterLabel.grid(row = 1, column = 1, columnspan = 2)
186
187        self.valueLabel = Label(self.frame, text = "Value: ", foreground = "Green")
188        #self.valueLabel.pack()
189        #self.valueLabel.place(x = 0.50, y = 0.10)
190        self.valueLabel.grid(row = 1, column = 3, columnspan = 2)
191
192        self.parameterEntry = Entry(self.frame, width = 25)
193        self.parameterEntry.grid(row = 2, column = 1, padx = 10, columnspan = 2)
194
195        self.valueEntry = Entry(self.frame, width = 25)
196        self.valueEntry.grid(row = 2, column = 3, padx = 10, columnspan = 2)
197
198        self.checkButton = Button(self.frame, text = "Check", command = self.checkParameter)
199        self.checkButton.grid(row = 3, column = 1, padx = 10, pady = 10)
200
201        self.updateButton = Button(self.frame, text = "Update", command = self.updateParameter)
202        self.updateButton.grid(row = 3, column = 2, padx = 10, pady = 10)
203
204        self.listDefault = Button(self.frame, text = "List Default Parameters", command = self.listDefaultParameters)
205        self.listDefault.grid(row = 4, column = 1, padx = 10, columnspan = 2)
206
207        self.listSpecified = Button(self.frame, text = "List User Specified Parameters", command = self.listSpecifiedParameters)
208        self.listSpecified.grid(row = 5, column = 1, padx = 10, columnspan = 2)
209
210        self.saveButton = Button(self.frame, text = "Save", command = self.saveParameter)
211        self.saveButton.grid(row = 4, column  = 4, padx = 20, pady = 10, sticky = E)
212
213        #self.printDefault = Button(self.frame, text = "Default Parameters",
214       
215        self.buttonQUIT = Button(self.frame, text = "QUIT", fg = "red", command = self.frame.quit)
216        #self.buttonQUIT.pack()
217        #self.buttonQUIT.place(x = 100, y = 50)
218        self.buttonQUIT.grid(row = 5, column = 4, padx = 20, pady = 10, sticky = E)
219
220       
221
222        self.resultTitle = StringVar()
223           
224        self.result = StringVar()
225
226        self.notesTitle = StringVar()
227
228        self.notes = StringVar()
229
230    def checkParameter(self):
231
232        parameter2check = self.parameterEntry.get()
233
234        if parameter2check in userSpecifiedParameters:
235            value = userSpecifiedParameters[parameter2check]
236            paramInfo = parameter2check + ': ' + value
237            color = "Green"
238            defaultYN = "No"
239        elif parameter2check in defaultParameters:
240            value = defaultParameters[parameter2check]
241            paramInfo = parameter2check + ': ' + value
242            color = "Green"
243            defaultYN = "Yes"
244        else:
245            paramInfo = '"' + parameter2check + '" does not exist.'
246            color = "Red"
247            defaultYN = "N/A"
248
249        self.resultTitle.set("Parameter Information")
250        self.result.set(paramInfo)
251        self.notesTitle.set("Default Parameter?")
252        self.notes.set(defaultYN)
253       
254        self.resultLabel = Label(self.frame, textvariable = self.resultTitle)
255        self.resultLabel.grid(row = 1, column = 5, padx = 10, columnspan = 2)
256       
257        self.resultValue = Label(self.frame, textvariable = self.result, foreground = color)
258        self.resultValue.grid(row = 2, column = 5, padx = 10, columnspan = 2)
259
260        self.valueEntry.delete(0, END)
261        self.valueEntry.insert(0, value)
262
263        self.notesLabel = Label(self.frame, textvariable = self.notesTitle)
264        self.notesLabel.grid(row = 1, column = 7, padx = 10)
265
266        self.notesValue = Label(self.frame, textvariable = self.notes)
267        self.notesValue.grid(row = 2, column = 7, padx = 10)
268
269    def updateParameter(self):
270
271        parameter2update = self.parameterEntry.get()
272       
273        if parameter2update in userSpecifiedParameters:
274            value2write = self.valueEntry.get()
275            userSpecifiedParameters[parameter2update] = value2write
276            paramInfo = parameter2update + ': ' + value2write
277            newParamYN = "Updated parameter in user specified parameter list"
278        elif parameter2update in defaultParameters:
279            value2write = self.valueEntry.get()
280            userSpecifiedParameters[parameter2update] = value2write
281            paramInfo = parameter2update + ': ' + value2write
282            newParamYN = "Added new parameter in user specified parameter list."
283        else:
284            paramInfo = '"' + parameter2update + '" does not exist.'
285            newParamYN = "-"
286
287        self.resultTitle.set("Parameter Information")
288        self.result.set(paramInfo)
289        self.notesTitle.set("Notes")
290        self.notes.set(newParamYN)
291
292        self.resultLabel = Label(self.frame, textvariable = self.resultTitle)
293        self.resultLabel.grid(row = 1, column = 5, padx = 10, columnspan = 2)
294       
295        self.resultValue = Label(self.frame, textvariable = self.result)
296        self.resultValue.grid(row = 2, column = 5, padx = 10, columnspan = 2)
297
298        self.notesLabel = Label(self.frame, textvariable = self.notesTitle)
299        self.notesLabel.grid(row = 1, column = 7, padx = 10)
300
301        self.notesValue = Label(self.frame, textvariable = self.notes)
302        self.notesValue.grid(row = 2, column = 7, padx = 10)
303
304    def listDefaultParameters(self):
305        listParameters(defaultParameters)
306
307    def listSpecifiedParameters(self):
308        listParameters(userSpecifiedParameters)
309
310    def saveParameter(self):
311        writeParamFile(edittedParamFileName, userSpecifiedParameters)
312       
313
314
315       
316
317       
318       
319       
320 
321def main():
322    root = Tk()
323    root.wm_title("Duchamp Parameters")
324 
325    interface = mainInterface(root)
326
327 
328    root.mainloop()
329    root.destroy()
330
331#-------------------------------------------------------------------------------     
332   
333##def main():
334##    editParameter()
335##    checkParameter()
336   
337if __name__ == '__main__':
338    main()
Note: See TracBrowser for help on using the repository browser.