source: branches/GUIdev/Original Trial Files (9 December 2013)/ParameterEdit8.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: 11.2 KB
Line 
1#-------------------------------------------------------------------------------
2# Name:        ParameterEdit8
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#directory = 'C:/Users/Kelvin/Dropbox/University of Sydney/Academic/2013-2014 CSIRO Astronomy & Space Science Project/Project Code'
14#directory = 'C:/Users/Kelvin/Documents/PythonIO/'
15#directory = 'C:/Users/Kelvy/PythonIO/'
16
17directory = '/u/hsu004/Kelvin/'
18
19# Define the file names involved.
20defaultParamFileDirectory = directory
21defaultParamFileName = 'duchampDefaultParameters.txt'
22defaultParamFilePath = defaultParamFileDirectory + defaultParamFileName
23
24userSpecifiedFileDirectory = directory
25userSpecifiedFileName = 'duchampHIPASS.txt'
26userSpecifiedFilePath = userSpecifiedFileDirectory + userSpecifiedFileName
27
28newFileDirectory = directory
29newFileName = 'duchampHIPASSedited.txt'
30newFilePath = newFileDirectory + newFileName
31
32
33# Define a simple function to determine the user's intent.
34# Note that this may be very inefficient.
35YES = 1
36NO = 0
37INVALID = -1
38def toEdit(response):
39    if (response == 'y') | (response == 'Y') | (response == 'yes'):
40        return(YES)
41    elif (response == 'n') | (response == 'N') | (response == 'no'):
42        return(NO)
43    else:
44        return(INVALID)
45
46
47# Define a function to read parameter files with the specified format.
48def readParamFile(paramFileName):
49
50    # Initialise an empty Dictionary.
51    parameters = {}
52
53    # Open the given parameter file.
54    paramFile = open(paramFileName)
55
56    # Load files for lines of parameter data in the specified format and
57    # store them into the dictionary.
58    for line in paramFile:
59        if line[0] != '#' and len(line) > 1:
60            linebits = line.split()
61            parameters[linebits[0]] = linebits[1]
62
63    # Go back to the start of the file.
64    paramFile.seek(0, 0)
65
66    paramFile.close()
67
68    return parameters
69
70import sys
71
72# Define a function to create a parameter file with the specified format.
73def writeParamFile(newParamFileName, parameters):
74
75    # Create a new file.
76    try:
77        newParamFile = open(newParamFileName, 'w')
78    except IOError:
79        return(0)
80    else:
81
82        # Write the editted set of parameters into the new file.
83        for par in parameters:
84            newParamFile.write('%s    %s\n'%(par, parameters[par]))
85
86        newParamFile.close()
87        return(1)
88
89# Define a function to print a list of parameters listed in a dictionary.
90def listParameters(parameters):
91
92    for par in parameters:
93        print(par, parameters[par])
94
95    print('\n')
96
97# Firstly, determine the default list of parameters
98defaultParameters = readParamFile(defaultParamFilePath)
99
100# Then, determine the user specified list of parameters
101userSpecifiedParameters = readParamFile(userSpecifiedFilePath)
102
103#-------------------------------------------------------------------------------
104# GUI - Tkinter section
105from tkinter import *
106
107class mainInterface:
108
109    def __init__(self, master):
110
111        self.frame = Frame(master)
112
113        self.frame.grid()
114
115        self.parameterLabel = Label(self.frame, text = "Parameter: ", foreground = "Blue")
116        self.parameterLabel.grid(row = 1, column = 1, columnspan = 2)
117
118        self.valueLabel = Label(self.frame, text = "Value: ", foreground = "Green")
119        self.valueLabel.grid(row = 1, column = 3, columnspan = 2)
120
121        self.parameterEntry = Entry(self.frame, width = 25)
122        self.parameterEntry.grid(row = 2, column = 1, padx = 10, columnspan = 2)
123
124        self.valueEntry = Entry(self.frame, width = 25)
125        self.valueEntry.grid(row = 2, column = 3, padx = 10, columnspan = 2)
126
127        self.checkButton = Button(self.frame, text = "Check", command = self.checkParameter)
128        self.checkButton.grid(row = 3, column = 1, padx = 10, pady = 10)
129
130        self.updateButton = Button(self.frame, text = "Update", command = self.updateParameter)
131        self.updateButton.grid(row = 3, column = 2, padx = 10, pady = 10)
132
133        self.listDefault = Button(self.frame, text = "List Default Parameters", command = self.listDefaultParameters)
134        self.listDefault.grid(row = 4, column = 1, padx = 10, columnspan = 2)
135
136        self.listSpecified = Button(self.frame, text = "List User Specified Parameters", command = self.listSpecifiedParameters)
137        self.listSpecified.grid(row = 5, column = 1, padx = 10, columnspan = 2)
138
139        self.promptSaveButton = Button(self.frame, text = "Save", command = self.promptSaveParameter)
140        self.promptSaveButton.grid(row = 4, column  = 4, padx = 20, pady = 10, sticky = E)
141
142        self.buttonQUIT = Button(self.frame, text = "QUIT", fg = "red", command = self.frame.quit)
143        self.buttonQUIT.grid(row = 5, column = 4, padx = 20, pady = 10, sticky = E)
144
145
146
147        self.resultTitle = StringVar()
148
149        self.result = StringVar()
150
151        self.notesTitle = StringVar()
152
153        self.notes = StringVar()
154
155
156        # New File Name
157        self.newParamFileDirectory = StringVar()
158
159        self.newParamFileName = StringVar()
160
161        self.newParamFilePath = StringVar()
162
163    def checkParameter(self):
164
165        parameter2check = self.parameterEntry.get()
166
167        if parameter2check in userSpecifiedParameters:
168            value = userSpecifiedParameters[parameter2check]
169            paramInfo = parameter2check + ': ' + value
170            color = "Green"
171            defaultYN = "No"
172        elif parameter2check in defaultParameters:
173            value = defaultParameters[parameter2check]
174            paramInfo = parameter2check + ': ' + value
175            color = "Green"
176            defaultYN = "Yes"
177        else:
178            value = "N/A"
179            paramInfo = '"' + parameter2check + '" does not exist.'
180            color = "Red"
181            defaultYN = "N/A"
182
183        self.resultTitle.set("Parameter Information")
184        self.result.set(paramInfo)
185        self.notesTitle.set("Default Parameter?")
186        self.notes.set(defaultYN)
187
188        self.resultLabel = Label(self.frame, textvariable = self.resultTitle)
189        self.resultLabel.grid(row = 1, column = 5, padx = 10, columnspan = 2)
190
191        self.resultValue = Label(self.frame, textvariable = self.result, foreground = color)
192        self.resultValue.grid(row = 2, column = 5, padx = 10, columnspan = 2)
193
194        self.valueEntry.delete(0, END)
195        self.valueEntry.insert(0, value)
196
197        self.notesLabel = Label(self.frame, textvariable = self.notesTitle)
198        self.notesLabel.grid(row = 1, column = 7, padx = 10)
199
200        self.notesValue = Label(self.frame, textvariable = self.notes)
201        self.notesValue.grid(row = 2, column = 7, padx = 10)
202
203    def updateParameter(self):
204
205        parameter2update = self.parameterEntry.get()
206
207        if parameter2update in userSpecifiedParameters:
208            value2write = self.valueEntry.get()
209            userSpecifiedParameters[parameter2update] = value2write
210            paramInfo = parameter2update + ': ' + value2write
211            newParamYN = "Updated parameter in user specified parameter list"
212        elif parameter2update in defaultParameters:
213            value2write = self.valueEntry.get()
214            userSpecifiedParameters[parameter2update] = value2write
215            paramInfo = parameter2update + ': ' + value2write
216            newParamYN = "Added new parameter in user specified parameter list."
217        else:
218            paramInfo = '"' + parameter2update + '" does not exist.'
219            newParamYN = "-"
220
221        self.resultTitle.set("Parameter Information")
222        self.result.set(paramInfo)
223        self.notesTitle.set("Notes")
224        self.notes.set(newParamYN)
225
226        self.resultLabel = Label(self.frame, textvariable = self.resultTitle)
227        self.resultLabel.grid(row = 1, column = 5, padx = 10, columnspan = 2)
228
229        self.resultValue = Label(self.frame, textvariable = self.result)
230        self.resultValue.grid(row = 2, column = 5, padx = 10, columnspan = 2)
231
232        self.notesLabel = Label(self.frame, textvariable = self.notesTitle)
233        self.notesLabel.grid(row = 1, column = 7, padx = 10)
234
235        self.notesValue = Label(self.frame, textvariable = self.notes)
236        self.notesValue.grid(row = 2, column = 7, padx = 10)
237
238    def listDefaultParameters(self):
239        #listParameters(defaultParameters)
240
241        self.defaultList = Listbox(self.frame, width = 50)
242        self.defaultList.grid(row = 6, column = 1, columnspan = 4)
243
244        self.defaultList.insert(END, "Default set of Parameters\n\n\n")
245
246        for par in defaultParameters:
247            self.defaultList.insert(END, par + "    \t    " + defaultParameters[par] + "\n")
248
249    def listSpecifiedParameters(self):
250        #listParameters(userSpecifiedParameters)
251
252        self.specifiedList = Listbox(self.frame, width = 50)
253        self.specifiedList.grid(row = 6, column = 1, columnspan = 4)
254
255        self.specifiedList.insert(END, "Specified set of Parameters\n\n\n")
256
257        for par in userSpecifiedParameters:
258            self.specifiedList.insert(END, par + "    \t    " + userSpecifiedParameters[par] + "\n")
259
260    def promptSaveParameter(self):
261
262        self.directoryLabel = Label(self.frame, text = "Directory: ")
263        self.directoryLabel.grid(row = 3, column = 5, padx = 20, pady = 10)
264
265        self.newFileDirectoryEntry = Entry(self.frame, width = 25)
266        self.newFileDirectoryEntry.grid(row = 3, column = 6, padx = 20, pady = 10)
267
268        self.nameLabel = Label(self.frame, text = "File Name: ")
269        self.nameLabel.grid(row = 4, column = 5, padx = 20, pady = 10)
270
271        self.newFileDirectoryEntry.delete(0, END)
272        self.newFileDirectoryEntry.insert(0, newFileDirectory)
273
274        self.newFileNameEntry = Entry(self.frame, width = 25)
275        self.newFileNameEntry.grid(row = 4, column = 6, padx = 20, pady = 10)
276
277        self.newFileNameEntry.delete(0, END)
278        self.newFileNameEntry.insert(0, newFileName)
279
280        self.saveButton = Button(self.frame, text = "Save to file", command = self.saveParameter)
281        self.saveButton.grid(row = 5, column  = 6, padx = 20, pady = 10, sticky = E)
282
283    def saveParameter(self):
284
285        directory = self.newFileDirectoryEntry.get()
286        name = self.newFileNameEntry.get()
287        self.newFilePath = directory + name
288
289        if writeParamFile(self.newFilePath, userSpecifiedParameters) == 0:
290            self.errorBox = Toplevel(width = 200, borderwidth = 20)
291            self.errorBox.title("File Directory Error")
292            self.errorMsg = Message(self.errorBox, text = "Cannot write to '" + self.newFilePath + "'")
293            self.errorMsg.grid(row = 1, column = 1, padx = 20, pady = 20, columnspan = 2)
294            self.errorBoxExit = Button(self.errorBox, text = "Dismiss", command = self.errorBox.destroy)
295            self.errorBoxExit.grid(row = 2, column = 1, padx = 20, pady = 20, columnspan = 2)
296
297
298
299
300
301
302
303
304
305def main():
306    root = Tk()
307    root.wm_title("Duchamp Parameters")
308
309    interface = mainInterface(root)
310
311
312    root.mainloop()
313    root.destroy()
314
315#-------------------------------------------------------------------------------
316
317##def main():
318##    editParameter()
319##    checkParameter()
320
321if __name__ == '__main__':
322    main()
Note: See TracBrowser for help on using the repository browser.