class Reader(Frame): def __init__(self, parent): Frame.__init__(self, parent) self.parent = parent self.initUI() def initUI(self): self.parent.title("Graphs") self.style = Style() self.style.theme_use("clam") self.pack(fill=BOTH, expand=1) self.columnconfigure(1, weight=1) self.columnconfigure(3, weight=1) self.columnconfigure(6, pad=7) self.rowconfigure(3, weight=1) self.rowconfigure(5, pad=7) menu = Menu(self.parent) self.parent.config(menu=menu) filemenu = Menu(menu) menu.add_cascade(label="File", menu=filemenu) filemenu.add_command(label="Load data",command = self.load_data) # lable to show current file and chanel self.file_lbl = Label(self, text="") self.file_lbl.grid(row = 0 , column = 3, pady=4, padx=5) # list box fro data files self.file_list = ScrolledList(self,lambda x: self.load_hunt_data(x)) self.file_list.grid(row=1, column=0, columnspan=3, rowspan=4, padx=5, sticky=E+W+S+N) # chanel graph viewer self.graph_viewer = TkinterGraph(self) self.graph_viewer.grid(row=1, column=3, columnspan=2, rowspan=4, padx=5, sticky=E+W+S+N) btn1 = Button(self, text="Left",command = lambda: self.plot_left()) btn1.grid(row=1, column=6) btn2 = Button(self, text="Right", command = lambda:self.plot_right()) btn2.grid(row=2, column=6, pady=4) # frames for the classifier for the two chanels self.frame_left = Frame(self, borderwidth=1) self.frame_right = Frame(self, borderwidth=1) self.frame_left.grid(row=5,column=3,columnspan=2, rowspan=1) btn4 = Button(self, text="SAVE", command = lambda:self.save_graph()) btn4.grid(row=5, column=6) # note manual addition of labels so that the lable will be to the right of tha radio button self.classify_left = StringVar() Label(self.frame_left,text="Left :").pack(side=LEFT) Label(self.frame_left,text="Type A").pack(side=LEFT) rb1 = Radiobutton(self.frame_left,variable=self.classify_left,value="TypeA") rb1.pack(side=LEFT) Label(self.frame_left,text="Type B").pack(side=LEFT) rb1 = Radiobutton(self.frame_left,variable=self.classify_left,value="TypeB") rb1.pack(side=LEFT) Label(self.frame_left,text="Type C").pack(side=LEFT) rb1 = Radiobutton(self.frame_left,variable=self.classify_left,value="TypeC") rb1.pack(side=LEFT) Label(self.frame_left,text="Type D").pack(side=LEFT) rb1 = Radiobutton(self.frame_left,variable=self.classify_left,value="TypeD") rb1.pack(side=LEFT) self.classify_right = StringVar() Label(self.frame_right,text="Right :").pack(side=LEFT) Label(self.frame_right,text="Type A").pack(side=LEFT) rb1 = Radiobutton(self.frame_right,variable=self.classify_right,value="TypeA") rb1.pack(side=LEFT) Label(self.frame_right,text="Type B").pack(side=LEFT) rb1 = Radiobutton(self.frame_right,variable=self.classify_right,value="TypeB") rb1.pack(side=LEFT) Label(self.frame_right,text="Type C").pack(side=LEFT) rb1 = Radiobutton(self.frame_right,variable=self.classify_right,value="TypeC") rb1.pack(side=LEFT) Label(self.frame_right,text="Type D").pack(side=LEFT) rb1 = Radiobutton(self.frame_right,variable=self.classify_right,value="TypeD") rb1.pack(side=LEFT) def load_data(self): # calls the file dialog box name = askopenfilename() (d_path,d_name)=split(name) # just want to extract the path of the file self.mypath = d_path # get 'filtered' files from that path files = self.get_files() # display in the list box self.file_list.load_data(files) def load_hunt_data(self,selection): (self.indx , self.filename) = selection d_file = join(self.mypath,self.filename) l_array=[] r_array=[] with open(d_file) as f: for line in f: data = line.split(',') if data[5]!='': r_array.append(data[5]) # RL_PVR l_array.append(data[6]) # LL_PVR self.rawy_l = numpy.array(l_array[1:]) # form 1 romove headder self.rawy_r = numpy.array(r_array[1:]) self.rawx = [i for i in range(len(self.rawy_l))] # reset the classification buttons self.classify_left.set("TypeA") self.classify_right.set("TypeA") self.plot_left() def plot_left(self): # choose th correct fram of radio buttons self.frame_right.grid_forget() self.frame_left.grid(row=5,column=3,columnspan=2, rowspan=1) # change display name self.file_lbl.configure(text=self.filename+" : Left") self.graph_viewer.change_data(self.rawx,self.rawy_l) def plot_right(self): self.frame_left.grid_forget() self.frame_right.grid(row=5,column=3,columnspan=2, rowspan=1) self.file_lbl.configure(text=self.filename+" : Right") self.graph_viewer.change_data(self.rawx,self.rawy_r) def save_graph(self): self.file_list.remove_item(self.indx) d_file = join(self.mypath,self.filename) # add a done prefix to the file name n_file = join(self.mypath,"done-"+self.filename) rename(d_file,n_file) # get the front of the filename fparts = self.filename.split('.') # save data wit the same name but with the chanel prefix and a dat postfix l_file = join(self.mypath,self.classify_left.get()+'-Left-'+fparts[0]+'.dat') # open file to write f = open(l_file, 'w') for v in self.rawy_l: f.write(v+'\n') f.close() r_file = join(self.mypath,self.classify_right.get()+'-Right-'+fparts[0]+'.dat') # open file to write f = open(r_file, 'w') for v in self.rawy_r: f.write(v+'\n') f.close() def get_files(self): files = [] for filename in listdir(self.mypath): # just get the files # note that it has to have the compleate path and name if isfile(join(self.mypath,filename)): # split the file name in to parts files.append(filename) #parts = filename.split('.') #print parts[-1] return files
class GraphFrame(Frame): def __init__(self, parent, paned_window, **kwargs): Frame.__init__(self, paned_window) self.parent = parent self.df_column_frame = ScrolledFrame(self, vertflex='expand') self.graph_frame = ScrolledFrame(self, horizflex='expand', vertflex='expand') self.plot_figure = kwargs['plot'] if 'plot' in kwargs else None self.plot_title = kwargs['plot_title'] if 'plot_title' in kwargs else 'Line Plot' self.y_label = kwargs['y_label'] if 'y_label' in kwargs else 'y' self.df = kwargs['df'] if 'df' in kwargs else DataFrame() # If the dataframe wasn't passed in, then create an empty dataframe plot_selected_avg = ModelRunnerPlots.get_avg_plot(self.plot_title, self.y_label, self.df, None) self.plot_figure = plot_selected_avg self.graph_canvas = FigureCanvasTkAgg(plot_selected_avg, master=self.graph_frame.interior()) self.col_list = list() for col in self.df.columns: if col != 'year' and 'Average' not in col: col_var = IntVar() col_var.set(0) col_checkbox = Checkbutton(self.df_column_frame.interior(), text=col, variable=col_var, command=self.on_col_check) self.col_list.append([col_var, col_checkbox, col]) avg_dataframe, dataframe = ModelRunnerPlots.find_avg_dataframe(self.df) for col in avg_dataframe.columns: if col != 'year': col_var = IntVar() col_var.set(0) col_checkbox = Checkbutton(self.df_column_frame.interior(), text=col, variable=col_var, command=self.on_col_check) self.col_list.append([col_var, col_checkbox, col]) self.log_filename_frame = Frame(self) self.log_label = Label(self.log_filename_frame, text='Logfile: ' + kwargs['log_filename']) if 'log_filename' in kwargs else None self.button_frame = Frame(self) self.close_button = Button(self.button_frame, text='Close', command=self.on_close) self.save_button = Button(self.button_frame, text='Save', command=self.on_save) def set_grid(self): #print 'Resizing graph frame' #self.grid(padx=4, pady=4) self.pack(padx=4, pady=4, expand=True, fill=Tkinter.BOTH) #self.rowconfigure(0, minsize=600) #self.columnconfigure(0, minsize=100) #self.columnconfigure(1, minsize=600) self.columnconfigure(0, weight=1) self.columnconfigure(1, weight=5) self.rowconfigure(0, weight=1) self.df_column_frame.grid(row=0, column=0, sticky=Tkinter.N + Tkinter.S + Tkinter.E + Tkinter.W) #self.df_column_frame.pack(side=Tkinter.LEFT, expand=True, fill=Tkinter.BOTH) row_index = 0 for col in self.col_list: checkButton = col[1] checkButton.grid(sticky=Tkinter.E + Tkinter.W) row_index += 1 self.graph_frame.grid(row=0, column=1, sticky=Tkinter.N + Tkinter.S + Tkinter.E + Tkinter.W) #self.graph_frame.pack(side=Tkinter.RIGHT, expand=True, fill=Tkinter.BOTH) try: self.graph_canvas.get_tk_widget().grid(row=0, column=0, sticky=Tkinter.N + Tkinter.S + Tkinter.E + Tkinter.W) #self.graph_canvas.get_tk_widget().pack(expand=True, fill=Tkinter.BOTH) except AttributeError: pass self.log_filename_frame.grid(row=1, column=0, sticky=Tkinter.N + Tkinter.S + Tkinter.E + Tkinter.W) if self.log_label != None: self.log_label.pack(side=Tkinter.LEFT) self.button_frame.grid(row=1, column=1, sticky=Tkinter.N + Tkinter.S + Tkinter.E + Tkinter.W) #self.button_frame.pack(side=Tkinter.BOTTOM, expand=True, fill=Tkinter.X) self.close_button.pack(side=Tkinter.RIGHT) self.save_button.pack(side=Tkinter.RIGHT) def unset_grid(self): self.pack_forget() self.df_column_frame.grid_forget() self.graph_frame.grid_forget() try: self.graph_canvas.get_tk_widget().grid_forget() except AttributeError: pass self.log_filename_frame.grid_forget() if self.log_label != None: self.log_label.pack_forget() self.button_frame.grid_forget() self.close_button.pack_forget() self.save_button.pack_forget() def on_col_check(self): # Based upon what is checked, a new plot should be created value_vars = list() for col in self.col_list: if col[0].get() == 1: #print col[2] + ' is checked' value_vars.append(col[2]) else: pass #print col[2] + ' is not checked' plot_selected = ModelRunnerPlots.create_line_plot(self.plot_title, self.y_label, self.df, None, value_vars=value_vars) #if len(value_vars) == 0: #plot_selected = ModelRunnerPlots.get_avg_plot(self.plot_title, self.y_label, self.df, None) plt.close(self.plot_figure) try: self.graph_canvas.get_tk_widget().grid_remove() self.graph_canvas = FigureCanvasTkAgg(plot_selected, master=self.graph_frame.interior()) self.graph_canvas.get_tk_widget().grid(row=0, column=1, sticky=Tkinter.N + Tkinter.S + Tkinter.E + Tkinter.W) except AttributeError: pass self.plot_figure = plot_selected def on_close(self): if self.parent != None: self.parent.on_close() def on_save(self): if self.plot_figure != None: filename = tkFileDialog.asksaveasfilename() if filename != None and len(filename) > 0: dotIndex = filename.rindex('.') # Enforce the 'png' file extension filename = filename[0:dotIndex+1] + 'png' self.plot_figure.savefig(filename, format='png')
file_text = fp.read() input_txt_updated.insert('0.0', file_text) fp.close() used_background = "green" unrelevant_background = "grey" # here we configure the highlighting input_txt.tag_configure("relatioship_highlight",background=relationship_background) input_txt.tag_configure("relevant_term_highlight",background=relevant_term_background) input_txt.tag_configure("used_highlight",background=used_background) input_txt.tag_configure("unrelevant_highlight",background=unrelevant_background) input_txt_updated.tag_configure("relatioship_highlight",background=relationship_background) input_txt_updated.tag_configure("relevant_term_highlight",background=relevant_term_background) input_txt_updated.tag_configure("used_highlight",background=used_background) input_txt_updated.tag_configure("unrelevant_highlight",background=unrelevant_background) ###################################################################### for child in inputdoc_frm.winfo_children(): child.grid_configure(padx=5, pady=5) for child in mainframe.winfo_children(): child.grid_configure(padx=5, pady=5) for child in supermainframe.winfo_children(): child.grid_configure(padx=5, pady=5) #here we hide the form inputdoc_frm_relationship.grid_forget() root.mainloop()
class Reader(Frame): def __init__(self, parent): Frame.__init__(self, parent) self.parent = parent self.initUI() def initUI(self): self.parent.title("Graphs") self.style = Style() self.style.theme_use("clam") self.pack(fill=BOTH, expand=1) self.columnconfigure(1, weight=1) self.columnconfigure(3, weight=1) self.columnconfigure(6, pad=7) self.rowconfigure(3, weight=1) self.rowconfigure(5, pad=7) menu = Menu(self.parent) self.parent.config(menu=menu) filemenu = Menu(menu) menu.add_cascade(label="File", menu=filemenu) filemenu.add_command(label="Load data", command=self.load_data) # lable to show current file and chanel self.file_lbl = Label(self, text="") self.file_lbl.grid(row=0, column=3, pady=4, padx=5) # list box fro data files self.file_list = ScrolledList(self, lambda x: self.load_hunt_data(x)) self.file_list.grid(row=1, column=0, columnspan=3, rowspan=4, padx=5, sticky=E + W + S + N) # chanel graph viewer self.graph_viewer = TkinterGraph(self) self.graph_viewer.grid(row=1, column=3, columnspan=2, rowspan=4, padx=5, sticky=E + W + S + N) btn1 = Button(self, text="Left", command=lambda: self.plot_left()) btn1.grid(row=1, column=6) btn2 = Button(self, text="Right", command=lambda: self.plot_right()) btn2.grid(row=2, column=6, pady=4) # frames for the classifier for the two chanels self.frame_left = Frame(self, borderwidth=1) self.frame_right = Frame(self, borderwidth=1) self.frame_left.grid(row=5, column=3, columnspan=2, rowspan=1) btn4 = Button(self, text="SAVE", command=lambda: self.save_graph()) btn4.grid(row=5, column=6) # note manual addition of labels so that the lable will be to the right of tha radio button self.classify_left = StringVar() Label(self.frame_left, text="Left :").pack(side=LEFT) Label(self.frame_left, text="Type A").pack(side=LEFT) rb1 = Radiobutton(self.frame_left, variable=self.classify_left, value="TypeA") rb1.pack(side=LEFT) Label(self.frame_left, text="Type B").pack(side=LEFT) rb1 = Radiobutton(self.frame_left, variable=self.classify_left, value="TypeB") rb1.pack(side=LEFT) Label(self.frame_left, text="Type C").pack(side=LEFT) rb1 = Radiobutton(self.frame_left, variable=self.classify_left, value="TypeC") rb1.pack(side=LEFT) Label(self.frame_left, text="Type D").pack(side=LEFT) rb1 = Radiobutton(self.frame_left, variable=self.classify_left, value="TypeD") rb1.pack(side=LEFT) self.classify_right = StringVar() Label(self.frame_right, text="Right :").pack(side=LEFT) Label(self.frame_right, text="Type A").pack(side=LEFT) rb1 = Radiobutton(self.frame_right, variable=self.classify_right, value="TypeA") rb1.pack(side=LEFT) Label(self.frame_right, text="Type B").pack(side=LEFT) rb1 = Radiobutton(self.frame_right, variable=self.classify_right, value="TypeB") rb1.pack(side=LEFT) Label(self.frame_right, text="Type C").pack(side=LEFT) rb1 = Radiobutton(self.frame_right, variable=self.classify_right, value="TypeC") rb1.pack(side=LEFT) Label(self.frame_right, text="Type D").pack(side=LEFT) rb1 = Radiobutton(self.frame_right, variable=self.classify_right, value="TypeD") rb1.pack(side=LEFT) def load_data(self): # calls the file dialog box name = askopenfilename() (d_path, d_name) = split(name) # just want to extract the path of the file self.mypath = d_path # get 'filtered' files from that path files = self.get_files() # display in the list box self.file_list.load_data(files) def load_hunt_data(self, selection): (self.indx, self.filename) = selection d_file = join(self.mypath, self.filename) l_array = [] r_array = [] with open(d_file) as f: for line in f: data = line.split(',') if data[5] != '': r_array.append(data[5]) # RL_PVR l_array.append(data[6]) # LL_PVR self.rawy_l = numpy.array(l_array[1:]) # form 1 romove headder self.rawy_r = numpy.array(r_array[1:]) self.rawx = [i for i in range(len(self.rawy_l))] # reset the classification buttons self.classify_left.set("TypeA") self.classify_right.set("TypeA") self.plot_left() def plot_left(self): # choose th correct fram of radio buttons self.frame_right.grid_forget() self.frame_left.grid(row=5, column=3, columnspan=2, rowspan=1) # change display name self.file_lbl.configure(text=self.filename + " : Left") self.graph_viewer.change_data(self.rawx, self.rawy_l) def plot_right(self): self.frame_left.grid_forget() self.frame_right.grid(row=5, column=3, columnspan=2, rowspan=1) self.file_lbl.configure(text=self.filename + " : Right") self.graph_viewer.change_data(self.rawx, self.rawy_r) def save_graph(self): self.file_list.remove_item(self.indx) d_file = join(self.mypath, self.filename) # add a done prefix to the file name n_file = join(self.mypath, "done-" + self.filename) rename(d_file, n_file) # get the front of the filename fparts = self.filename.split('.') # save data wit the same name but with the chanel prefix and a dat postfix l_file = join(self.mypath, self.classify_left.get() + '-Left-' + fparts[0] + '.dat') # open file to write f = open(l_file, 'w') for v in self.rawy_l: f.write(v + '\n') f.close() r_file = join( self.mypath, self.classify_right.get() + '-Right-' + fparts[0] + '.dat') # open file to write f = open(r_file, 'w') for v in self.rawy_r: f.write(v + '\n') f.close() def get_files(self): files = [] for filename in listdir(self.mypath): # just get the files # note that it has to have the compleate path and name if isfile(join(self.mypath, filename)): # split the file name in to parts files.append(filename) #parts = filename.split('.') #print parts[-1] return files