Пример #1
0
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
Пример #2
0
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()
Пример #4
0
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