コード例 #1
0
def ProgressBarWait(Progress: ttk.Progressbar):
    Random = randint(3, 25)
    Now = Progress["value"]
    if Now + Random <= 94:
        Progress["value"] += Random
        Progress.update()
    sleep(0.5)
コード例 #2
0
    def __display_download(self):
        self.display_type = self.DOWNLOAD

        self.frame.update()
        para_label = Label(self.frame,
                           text="Parameters",
                           anchor=W,
                           width=int(self.frame.winfo_width()))
        para_label.pack()
        url_frame = Frame(self.frame, width=self.frame.winfo_width())
        url_frame.pack()
        url_label = Label(url_frame, text="URL")
        url_label.pack(side=LEFT)
        url_label.update()
        self.url_entry = url_entry = Entry(url_frame,
                                           width=self.frame.winfo_width() -
                                           url_label.winfo_width())
        self.url_entry.pack(side=LEFT, fill=X)
        speed_label = Label(self.frame,
                            text="",
                            anchor=W,
                            textvariable=self.speed,
                            width=int(self.frame.winfo_width()))
        speed_label.pack(side=BOTTOM)
        prog_bar = Progressbar(self.frame,
                               orient=HORIZONTAL,
                               length=self.frame.winfo_width(),
                               mode="determinate",
                               value=0,
                               variable=self.progress)
        prog_bar.pack(side=BOTTOM)
        prog_bar.update()
        exec_btn = Button(self.frame, text="Download", command=self.__download)
        exec_btn.pack(side=BOTTOM)
コード例 #3
0
def export_all_X_ray_graphs(import_X_ray_scans, analyze_1D, run_program):
    location = askdirectory(title="Please choose a directory")
    if location is not None and location is not '':
        for widget in analyze_1D.Frame1_2.winfo_children():
            widget.destroy()
        Label(analyze_1D.Frame1_2, text="Export").pack(side=LEFT)
        progress = Progressbar(analyze_1D.Frame1_2,
                               orient="horizontal",
                               mode='determinate')
        progress.pack(side=LEFT)
        progress["value"] = 0
        progress["maximum"] = len(import_X_ray_scans.phi)

        for i in range(len(import_X_ray_scans.phi)):
            progress["value"] = progress["value"] + 1
            progress.update()
            f = plt.figure(figsize=(10, 10), dpi=100)
            plt.plot(import_X_ray_scans.matrix_two_theta[i],
                     import_X_ray_scans.matrix_intensity[i],
                     label="" + str(i + 1) + "")
            plt.xlabel(r"$2\theta$")
            plt.ylabel("Intensity")
            plt.title("Original" + "/n" + "phi=" +
                      str(float(import_X_ray_scans.phi[i])) + "_psi=" +
                      str(float(import_X_ray_scans.psi[i])))
            plt.savefig(str(location) + "/original_phi=" +
                        str(float(import_X_ray_scans.phi[i])) + "; psi=" +
                        str(float(import_X_ray_scans.psi[i])) + ".png",
                        bbox_inches="tight")
            plt.close()
        for widget in analyze_1D.Frame1_2.winfo_children():
            widget.destroy()
    run_program.fenetre.mainloop()
コード例 #4
0
def export_all_fitting_calibrate_graph(calcul_2D,calib_2D,analyze_2D,run_program):
    location=askdirectory(title="Please choose a directory")
    if location is not None and location is not '':
        for widget in analyze_2D.Frame1_2.winfo_children():
            widget.destroy()       
        Label(analyze_2D.Frame1_2,text="Export").pack(side=LEFT)
        progress = Progressbar(analyze_2D.Frame1_2,orient="horizontal",mode='determinate')
        progress.pack(side=LEFT)
        progress["value"] = 0
        progress["maximum"] = len(calib_2D.phi)*calcul_2D.gamma_number_step

        for i in range(len(calcul_2D.phi)):
            for j in range(calcul_2D.gamma_number_step):
                progress["value"] = progress["value"]+1
                progress.update()

                fig=plt.figure(facecolor="0.94",figsize=(10,10),dpi=100)
                plt.xlabel(r"$2\theta(°)$")
                plt.ylabel("Intensity")
                plt.title("Fitting_phi="+str(float(calcul_2D.phi[i]))+"; psi="+str(float(calcul_2D.psi[i]))+"; step="+str(j+1)+'\n'+
                          r"$\gamma(°)$"+" integrate from "+str("%0.1f" %(calcul_2D.gamma_i[round(calcul_2D.gamma_from+j*calcul_2D.gamma_stepline-calcul_2D.gamma_stepline/2)]))
                          +"° to "+str("%0.1f" %(calcul_2D.gamma_i[round(calcul_2D.gamma_from+j*calcul_2D.gamma_stepline+calcul_2D.gamma_stepline/2)]))+"°")
                try:
                    plt.plot(calcul_2D.two_theta_limit,calcul_2D.all_matrix_intensity[i][j],label='original')
                except (IndexError,ValueError): 
                    pass
                else:
                    try:
                        plt.plot(calcul_2D.two_theta_limit,calcul_2D.all_matrix_background_intensity[i][j],label='background')
                        plt.plot(calcul_2D.two_theta_limit,calcul_2D.all_matrix_real_intensity[i][j],label='substrat background')
                    except (IndexError,ValueError): 
                        pass
                    else:
                        try:
                            x=[calcul_2D.all_two_theta_pearson[i*calcul_2D.gamma_number_step+j],calcul_2D.all_two_theta_pearson[i*calcul_2D.gamma_number_step+j]]
                            y=[min(calcul_2D.all_matrix_real_intensity[i][j]),max(calcul_2D.all_matrix_real_intensity[i][j])]                      
                            plt.plot(calcul_2D.two_theta_limit,calcul_2D.all_matrix_F1_peak1[i][j],label='k alpha 1')
                            plt.plot(calcul_2D.two_theta_limit,calcul_2D.all_matrix_F2_peak1[i][j],label='k alpha 2')
                            if len(calcul_2D.peaks)>=2:
                                plt.plot(calcul_2D.two_theta_limit,calcul_2D.all_matrix_F1_peak2[i][j])
                                plt.plot(calcul_2D.two_theta_limit,calcul_2D.all_matrix_F2_peak2[i][j])
                            if len(calcul_2D.peaks)==3:
                                plt.plot(calcul_2D.two_theta_limit,calcul_2D.all_matrix_F1_peak3[i][j])
                                plt.plot(calcul_2D.two_theta_limit,calcul_2D.all_matrix_F2_peak3[i][j])
                            plt.plot(calcul_2D.two_theta_limit,calcul_2D.all_matrix_F_pearson[i][j],label='fitting pearson vii')
                            plt.plot(x,y,label=r"$2\theta_{0}$""="+str(calcul_2D.all_two_theta_pearson[i*calcul_2D.gamma_number_step+j])+"")
                        except (IndexError,ValueError): 
                            pass
                        else:           
                            plt.legend(loc='upper left', bbox_to_anchor=(-0.1, -0.2, 1.2, 0),ncol=3,mode="expand",borderaxespad=0.,fontsize='x-small')
                            plt.subplots_adjust(bottom=0.3)
                            plt.savefig(str(location)+"/"+str(i*calcul_2D.gamma_number_step+j+1)+"_Fitting_phi="+str(float(calcul_2D.phi[i]))+"; psi="+str(float(calcul_2D.psi[i]))+";step="+str(j+1)+".png", bbox_inches="tight")
                plt.close(fig)
        for widget in analyze_2D.Frame1_2.winfo_children():
            widget.destroy()   
    run_program.fenetre.mainloop()
コード例 #5
0
def done():
    global COPY, MOVE
    # Get the number of the operations that need to be done
    items = len(MOVE)
    for file in COPY:
        for dest in COPY[file]:
            items += 1
    # Make the top-level window of the progress bar
    prog = Toplevel(root)
    prog.minsize(200, 70)
    progFrame = Frame(prog, bg="#333333", width=250, height=70)
    progFrame.pack(expand=TRUE, fill='both')
    progFrame.pack_propagate(0)
    progress_label = Label(progFrame,
                           text="Processing...",
                           bg="#333333",
                           fg="#ffffff",
                           font="Verdana 10 bold")
    progress_label.pack(pady=5)
    progress = Progressbar(progFrame,
                           orient=HORIZONTAL,
                           maximum=items,
                           length=200,
                           mode='determinate')
    progress.pack(pady=5)
    # Do all the copying
    for file in COPY:
        for dest in COPY[file]:
            try:
                shutil.copy2(file, dest)
            # Except there is a file with the same name
            except shutil.SameFileError:
                messagebox.showinfo(
                    'Error', "Unable to copy " + path_leaf(file) + " to " +
                    dest + " which has a file with the same name.")
                pass
            # Update the progress bar
            progress['value'] += 1
            progress.update()
    # Do all the moving
    for file in MOVE:
        try:
            shutil.move(file, MOVE[file])
        # Except there is a file with the same name
        except shutil.Error:
            messagebox.showinfo(
                'Error', "Unable to move " + path_leaf(file) + " to " +
                MOVE[file] + " which has a file with the same name.")
            pass
        # Update the progress bar
        progress['value'] += 1
        progress.update()
    # Show the "DONE!" message and close the program
    messagebox.showinfo('Done', 'Done!')
    root.destroy()
コード例 #6
0
    def __display_fetch_downlod(self):
        self.display_type = self.FETCHDOWNLOAD

        self.frame.update()
        left_frame = Frame(self.frame,
                           width=int(self.frame.winfo_width() / 2),
                           height=50,
                           padx=5)
        left_frame.pack(side=LEFT)
        left_frame.pack_propagate(0)
        left_frame.update()
        para_label = Label(left_frame,
                           text="Parameters",
                           anchor=W,
                           width=int(left_frame.winfo_width()))
        para_label.pack()
        url_frame = Frame(left_frame, width=left_frame.winfo_width())
        url_frame.pack()
        url_label = Label(url_frame, text="URL")
        url_label.pack(side=LEFT)
        url_label.update()
        self.url_entry = url_entry = Entry(url_frame,
                                           width=left_frame.winfo_width() -
                                           url_label.winfo_width())
        self.url_entry.pack(side=LEFT, fill=X)

        speed_label = Label(left_frame,
                            text="",
                            anchor=W,
                            textvariable=self.speed,
                            width=int(self.frame.winfo_width()))
        speed_label.pack(side=BOTTOM)
        prog_bar = Progressbar(left_frame,
                               orient=HORIZONTAL,
                               length=self.frame.winfo_width(),
                               mode="determinate",
                               value=0,
                               variable=self.progress)
        prog_bar.pack(side=BOTTOM)
        prog_bar.update()
        exec_btn = Button(left_frame,
                          text="Fetch&Download",
                          command=self.__fetch_download)
        exec_btn.pack(side=BOTTOM)

        right_frame = Frame(self.frame,
                            width=self.frame.winfo_width() / 2,
                            padx=5)
        right_frame.pack(side=LEFT)
        self.__display_proxy(right_frame)
        right_frame.update()
        left_frame.config(height=right_frame.winfo_height())
コード例 #7
0
class RegularityRallyGUI(RegularityRally):
    STATES = {-1: 'Select configuration',
              0: 'Ready',
              1: 'Fast Lap',
              2: 'Untimed Lap',
              3: 'Set Lap',
              4: 'Confirmation Lap'}

    def __init__(self):
        super().__init__()

        # Data attribute initialization.
        self.root_dir = pathlib.Path(__file__).parent.parent.absolute()
        self.config_dir = os.path.join(self.root_dir, 'config')

        # Overwrite initial state. Config read is mandatory here.
        self.state = -1

        # GUI attribute initialization.
        self.master = None
        self.font = None
        self.w = None
        self.h = None

        self.l_state = None
        self.l_mark = None
        self.l_cur_lap = None
        self.l_cur_lap_disp = None
        self.l_set_lap = None
        self.l_set_lap_disp = None
        self.t_laps = None
        self.bar_progress = None
        self.style_progress = None

        # Get start time.
        self.time_stamps = []

        # Window initialization.
        self.init_window()

    def init_window(self):
        # Create main window
        self.master = Tk()
        self.master.title('Regularity Rally Timer')

        # Resize window.
        self.master.state('zoomed')
        self.w = self.master.winfo_screenwidth()
        self.h = self.master.winfo_screenheight()

        # Init font variable.
        self.font = tk_font.Font(family="Helvetica", size=36, weight="bold")

        # Create menu
        menu_bar = Menu(self.master)

        file_menu = Menu(menu_bar, tearoff=0)
        file_menu.add_command(label='New', command=self.new_cb)
        file_menu.add_command(label='Exit', command=self.master.quit)
        menu_bar.add_cascade(label="File", menu=file_menu)

        extras_menu = Menu(menu_bar, tearoff=0)
        extras_menu.add_command(label='Set new start time', command=None)
        extras_menu.add_command(label='Manage Config Files', command=None)
        extras_menu.add_command(label='Options', command=None)
        menu_bar.add_cascade(label="Extras", menu=extras_menu)

        self.master.config(menu=menu_bar)

        # Init Widgets.
        # TODO: Resize and anchor Labels.
        # Information row.
        row_count = 0
        self.l_state = Label(self.master, text='Select Configuration', font=self.font)
        self.l_state.grid(row=row_count, column=0)
        self.l_mark = Label(self.master, text='', font=self.font)
        self.l_mark.grid(row=row_count, column=1)
        self.t_laps = Text(self.master, width=20, font=("Consolas", 32))
        self.t_laps.grid(row=row_count, column=2, rowspan=3)
        self.master.grid_rowconfigure(row_count, weight=1)

        # Labels row.
        row_count += 1
        self.l_cur_lap = Label(self.master, text='Current Lap', anchor='w', font=self.font)
        self.l_cur_lap.grid(row=row_count, column=0)
        self.l_set_lap = Label(self.master, text='Current Set Lap', anchor='w', font=self.font)
        self.l_set_lap.grid(row=row_count, column=1)
        self.master.grid_rowconfigure(row_count, weight=1)

        # Time display row.
        row_count += 1
        self.l_cur_lap_disp = Label(self.master, text='__:__:__._', anchor='w', font=self.font)
        self.l_cur_lap_disp.grid(row=row_count, column=0)
        self.l_set_lap_disp = Label(self.master, text='__:__:__._', anchor='w', font=self.font)
        self.l_set_lap_disp.grid(row=row_count, column=1)
        self.master.grid_rowconfigure(row_count, weight=1)

        # Progressbar and countdown row.
        row_count += 1
        # Create the progressbar style to be labeled.
        self.style_progress = Style(self.master)
        self.style_progress.layout("LabeledProgressbar",
                                   [('LabeledProgressbar.trough',
                                     {'children': [('LabeledProgressbar.pbar',
                                                    {'side': 'left', 'sticky': 'ns'}),
                                                   ("LabeledProgressbar.label",  # label inside the bar
                                                    {"sticky": ""})],
                                      'sticky': 'nswe'})])
        self.bar_progress = Progressbar(self.master, orient='horizontal', length=1000, mode='determinate',
                                        style="LabeledProgressbar")
        self.bar_progress.grid(row=row_count, column=0, columnspan=3, ipady=25)

        # Column configuration.
        self.master.grid_columnconfigure(0, weight=1)
        self.master.grid_columnconfigure(1, weight=1)

        # Define Binds.
        self.master.bind('1', self.one_cb)
        self.master.bind('2', self.two_cb)

        # Start master mainloop.
        self.master.after(10, self.gui_update)
        self.master.mainloop()

    def gui_update(self):
        # Calculate time delta of current lap.
        if self.state > 0:

            # Call regularity update.
            self.reg_update()

            # Update current lap time display.
            self.l_cur_lap_disp['text'] = '{:02}:{:02}:{:02}.{}'.format(self.curlap_decoded[0],
                                                                        self.curlap_decoded[1],
                                                                        self.curlap_decoded[2],
                                                                        floor(self.curlap_decoded[3]/100))

            # Update countdown display, if confirmation lap.
            if self.state == 4:
                # Update progress bar.
                self.bar_progress['value'] = self.curlap_countdown_seconds
                self.style_progress.configure("LabeledProgressbar", text='{:.2f}'.format(self.curlap_countdown_seconds))
                self.bar_progress.update()

                # Update mark label.
                if self.mark_count < len(self.mark_labels):
                    self.l_mark['text'] = self.mark_labels[self.mark_count]

            else:
                self.bar_progress['value'] = 0
                self.style_progress.configure("LabeledProgressbar", text='')

        # Schedule next call.
        self.master.after(10, self.gui_update)

    # Method called, when new race should be created.
    def new_cb(self):
        # Select and open a configuration.
        conf_file = open(filedialog.askopenfilename(initialdir=self.config_dir,
                                                    title='Select file',
                                                    filetypes=(('Configuration', "*.cfg"), ("all files", "*.*"))))

        # Read configuration.
        self.read_config(conf_file.name)

        # Write state.
        self.state = 0
        self.l_state['text'] = 'Ready'

    # Method for new lap.
    # Only update displays here. Set data in regularityRally.reg_new_lap()
    def one_cb(self, _):
        if self.state == -1:
            self.new_cb()
        else:
            # Store last state.
            last_state = self.state

            # Perform new lap method.
            self.reg_new_lap()

            # Change label.
            self.l_state['text'] = self.STATES[self.state]

            if self.state in [3, 4]:
                marks = list(self.config['marks'].keys())
                self.l_mark['text'] = marks[0]

            # Update lap times text field.
            self.t_laps.delete(1.0, 'end')
            for lt_id, lt in enumerate(self.lap_times_decoded):
                # Get text char from config. If id out of config, set 'F.
                if lt_id < len(self.config['states']):
                    state_char = self.STATES[self.config['states'][lt_id]][0]
                else:
                    state_char = 'F'

                # Set char for each lap.
                self.t_laps.insert('end', '{:>2}: {:02}:{:02}:{:02}.{:03} {}\n'.format(lt_id + 1,
                                                                                       lt[0], lt[1], lt[2], lt[3],
                                                                                       state_char))

            # Update GUI items related to set lap.
            if self.cur_set_time is not None:
                # Update shown set time.
                self.l_set_lap_disp['text'] = '{:02}:{:02}:{:02}.{:01}'.format(self.cur_set_time_decoded[0],
                                                                               self.cur_set_time_decoded[1],
                                                                               self.cur_set_time_decoded[2],
                                                                               floor(self.cur_set_time_decoded[3]/100))

                # Update progressbar maximum to set lap time to show countdown.
                self.bar_progress['maximum'] = self.cur_set_time

    def two_cb(self, _):
        # Execute superclass method.
        self.mark_reached()

        # Write next mark to label.
        marks = list(self.config['marks'].keys())
        if len(marks) > self.mark_count:
            self.l_mark['text'] = marks[self.mark_count]
        else:
            self.l_mark['text'] = 'countdown'
コード例 #8
0
class Extractor(Frame):

    def __init__(self, master=None, **kw):
        Frame.__init__(self, master, **kw)
        self.background = '#3c3f41'
        self.border_color = '#303030'
        self.checkbox_color = '#393c3d'
        self.args = {
            "data_dir": "",
            "data_file": "",
            "pred_dir": "predictions",
            "prepared_data": "processed_data",
        }
        self.textboxes = {}
        self.checkboxes = {}
        self.thread = None
        self.running = False
        self._init_ui()

    def _init_ui(self):
        ws = self.master.winfo_screenwidth()
        hs = self.master.winfo_screenheight()
        h = hs - 100
        w = int(h / 1.414) + 100
        x = (ws / 2) - (w / 2)
        y = (hs / 2) - (h / 2)
        self.master.geometry('%dx%d+%d+%d' % (w, h, x, y))
        self.master.maxsize(w, h)
        self.master.minsize(w, h)
        self.master.title("InvoiceNet - Extractor")

        self.pack(fill=BOTH, expand=True)

        self.columnconfigure(0, weight=1)
        self.rowconfigure(0, weight=0)
        self.rowconfigure(1, weight=1)
        self.rowconfigure(2, weight=0)
        self.rowconfigure(3, weight=1)

        self.configure(bg=self.background, bd=0)

        logo_frame = Frame(self, bg=self.background, bd=0, relief=SUNKEN,
                           highlightbackground=self.border_color, highlightthickness=1)
        param_frame = Frame(self, bg=self.background, bd=0, relief=SUNKEN,
                            highlightbackground=self.border_color, highlightthickness=1)
        progress_frame = Frame(self, bg=self.background, bd=0, relief=SUNKEN,
                               highlightbackground=self.border_color, highlightthickness=1)
        main_frame = Frame(self, bg=self.background, bd=0, relief=SUNKEN,
                           highlightbackground=self.border_color, highlightthickness=1)

        logo_frame.grid(row=0, column=0, sticky='news')
        param_frame.grid(row=1, column=0, sticky='news')
        progress_frame.grid(row=2, column=0, sticky='news', padx=50, pady=(0, 20))
        main_frame.grid(row=3, column=0, sticky='news')

        # Logo Frame
        logo_frame.columnconfigure(0, weight=1)
        logo_frame.columnconfigure(1, weight=1)
        logo_frame.columnconfigure(2, weight=2)
        logo_frame.rowconfigure(0, weight=1)

        self.logo_img = ImageTk.PhotoImage(Image.open(r'widgets/logo.png'))
        Label(logo_frame, bg=self.background, image=self.logo_img, anchor='w').grid(row=0, column=0, sticky='news')
        Label(logo_frame, text="InvoiceNet - Extractor", bg=self.background,
              fg="white", font=("Arial", 24, "bold")).grid(row=0, column=1, sticky='news', padx=50)

        # Param Frame
        param_frame.columnconfigure(0, weight=1)
        param_frame.columnconfigure(1, weight=0)
        param_frame.columnconfigure(2, weight=0)
        param_frame.columnconfigure(3, weight=1)
        param_frame.rowconfigure(0, weight=1)
        param_frame.rowconfigure(1, weight=0)
        param_frame.rowconfigure(2, weight=0)
        param_frame.rowconfigure(3, weight=0)
        param_frame.rowconfigure(4, weight=0)
        param_frame.rowconfigure(5, weight=0)
        param_frame.rowconfigure(6, weight=1)

        data_file_param = Frame(param_frame, bg=self.background, bd=0, relief=SUNKEN,
                                highlightbackground=self.border_color, highlightthickness=0)
        data_dir_param = Frame(param_frame, bg=self.background, bd=0, relief=SUNKEN,
                               highlightbackground=self.border_color, highlightthickness=0)
        prepare_dir_param = Frame(param_frame, bg=self.background, bd=0, relief=SUNKEN,
                                  highlightbackground=self.border_color, highlightthickness=0)
        pred_dir_param = Frame(param_frame, bg=self.background, bd=0, relief=SUNKEN,
                               highlightbackground=self.border_color, highlightthickness=0)
        field_param = Frame(param_frame, bg=self.background, bd=0, relief=SUNKEN,
                            highlightbackground=self.border_color, highlightthickness=0)

        data_file_param.grid(row=1, column=1, pady=10, padx=20)
        data_dir_param.grid(row=2, column=1, pady=10, padx=20)
        prepare_dir_param.grid(row=3, column=1, pady=10, padx=20)
        pred_dir_param.grid(row=4, column=1, pady=10, padx=20)
        field_param.grid(row=1, column=2, rowspan=4, pady=10, padx=10, sticky='news')

        # Invoice File
        data_file_frame = Frame(data_file_param, bg=self.background, bd=0, relief=SUNKEN,
                                highlightbackground=self.border_color, highlightthickness=0)
        data_file_frame.pack(side=TOP, fill=BOTH)

        Label(data_file_frame, text="Invoice File:", bg=self.background,
              fg="white", font=("Arial", 8, "bold"), anchor='w').pack(side=LEFT, fill=BOTH)
        HoverButton(data_file_frame, image_path=r'widgets/open_file.png',
                    command=lambda: self._open("data_file"),
                    width=18, height=18, bg=self.background, bd=0,
                    highlightthickness=0, activebackground='#558de8').pack(side=RIGHT)

        self.textboxes["data_file"] = Text(data_file_param, height=1, width=20)
        self.textboxes["data_file"].insert('1.0', self.args["data_file"])
        self.textboxes["data_file"].pack(side=BOTTOM)

        # Invoice Directory
        data_dir_frame = Frame(data_dir_param, bg=self.background, bd=0, relief=SUNKEN,
                               highlightbackground=self.border_color, highlightthickness=0)
        data_dir_frame.pack(side=TOP, fill=BOTH)

        Label(data_dir_frame, text="Invoice Folder:", bg=self.background,
              anchor='w', fg="white", font=("Arial", 8, "bold")).pack(side=LEFT, fill=BOTH)
        HoverButton(data_dir_frame, image_path=r'widgets/open_dir.png',
                    command=lambda: self._open("data_dir"),
                    width=18, height=18, bg=self.background, bd=0,
                    highlightthickness=0, activebackground='#558de8').pack(side=RIGHT)

        self.textboxes["data_dir"] = Text(data_dir_param, height=1, width=20)
        self.textboxes["data_dir"].insert('1.0', self.args["data_dir"])
        self.textboxes["data_dir"].pack(side=BOTTOM)

        # Prepared Data Directory
        prepare_dir_frame = Frame(prepare_dir_param, bg=self.background, bd=0, relief=SUNKEN,
                                  highlightbackground=self.border_color, highlightthickness=0)
        prepare_dir_frame.pack(side=TOP, fill=BOTH)

        Label(prepare_dir_frame, text="Processed Data Folder:", bg=self.background,
              anchor='w', fg="white", font=("Arial", 8, "bold")).pack(side=LEFT, fill=BOTH)
        HoverButton(prepare_dir_frame, image_path=r'widgets/open_dir.png',
                    command=lambda: self._open("prepared_data"),
                    width=18, height=18, bg=self.background, bd=0,
                    highlightthickness=0, activebackground='#558de8').pack(side=RIGHT)

        self.textboxes["prepared_data"] = Text(prepare_dir_param, height=1, width=20)
        self.textboxes["prepared_data"].insert('1.0', self.args["prepared_data"])
        self.textboxes["prepared_data"].pack(side=BOTTOM)

        # Prediction Directory
        pred_dir_frame = Frame(pred_dir_param, bg=self.background, bd=0, relief=SUNKEN,
                               highlightbackground=self.border_color, highlightthickness=0)
        pred_dir_frame.pack(side=TOP, fill=BOTH)

        Label(pred_dir_frame, text="Prediction Folder:", bg=self.background,
              anchor='w', fg="white", font=("Arial", 8, "bold")).pack(side=LEFT, fill=BOTH)
        HoverButton(pred_dir_frame, image_path=r'widgets/open_dir.png',
                    command=lambda: self._open("pred_dir"),
                    width=18, height=18, bg=self.background, bd=0,
                    highlightthickness=0, activebackground='#558de8').pack(side=RIGHT)

        self.textboxes["pred_dir"] = Text(pred_dir_param, height=1, width=20)
        self.textboxes["pred_dir"].insert('1.0', self.args["pred_dir"])
        self.textboxes["pred_dir"].pack(side=BOTTOM)

        # Field Checkboxes
        field_frame = Frame(field_param, bg=self.checkbox_color, bd=0, relief=SUNKEN,
                            highlightbackground=self.border_color, highlightthickness=1)
        field_frame.pack(expand=True, fill=BOTH, pady=10)

        Label(field_frame, text="Field:", width=30, bg=self.checkbox_color,
              anchor='w', fg="white", font=("Arial", 8, "bold")).pack(side=TOP, fill=X, padx=5, pady=5)

        checkbox_frame = Frame(field_frame, bg=self.checkbox_color, bd=0, relief=SUNKEN,
                               highlightbackground=self.border_color, highlightthickness=1)
        checkbox_frame.pack(expand=True, fill=BOTH, side=BOTTOM)

        checkbox_frame.columnconfigure(0, weight=1)
        checkbox_frame.columnconfigure(1, weight=1)
        checkbox_frame.columnconfigure(2, weight=1)
        checkbox_frame.columnconfigure(3, weight=1)
        for i in range(len(FIELDS) // 2):
            checkbox_frame.rowconfigure(i, weight=1)
        for idx, key in enumerate(FIELDS):
            self.checkboxes[key] = BooleanVar(checkbox_frame, value=False)
            state = False
            if os.path.exists('./models/invoicenet/'):
                state = key in os.listdir('./models/invoicenet/')

            Checkbutton(checkbox_frame, fg="black", bg=self.checkbox_color,
                        activebackground=self.background, variable=self.checkboxes[key], anchor='w',
                        state="normal" if state else "disabled", highlightthickness=0).grid(row=idx // 2,
                                                                                            column=2 if idx % 2 else 0,
                                                                                            sticky='news', padx=(10, 0))
            Label(checkbox_frame, text=key, bg=self.checkbox_color,
                  anchor='w', fg="white", font=("Arial", 8, "bold")).grid(row=idx // 2, column=3 if idx % 2 else 1, sticky='news')

        # Prepare Data Button
        HoverButton(param_frame, image_path=r'widgets/prepare.png', command=self._prepare_data,
                    text='Prepare Data', compound='center', font=("Arial", 10, "bold"), bg=self.background,
                    bd=0, highlightthickness=0, activebackground=self.background).grid(row=5, column=1, columnspan=2,
                                                                                       padx=20, pady=(20, 0),
                                                                                       sticky='news')

        # Progress Frame
        self.progress_label = Label(progress_frame, text="Preparing data:", bg=self.background,
                                    anchor='w', fg="white", font=("Arial", 8, "bold"))
        self.progress_label.pack(side=TOP, expand=True, fill=X, pady=5)
        self.progressbar = Progressbar(progress_frame, orient=HORIZONTAL, length=100, mode='determinate')
        self.progressbar.pack(side=BOTTOM, expand=True, fill=X)

        # Main Frame
        main_frame.columnconfigure(0, weight=1)
        main_frame.rowconfigure(0, weight=1)
        main_frame.rowconfigure(1, weight=1)

        button_frame = Frame(main_frame, bg=self.background, bd=0, relief=SUNKEN,
                             highlightbackground=self.border_color, highlightthickness=0)
        button_frame.grid(row=0, column=0, sticky='news')

        button_frame.rowconfigure(0, weight=1)
        button_frame.columnconfigure(0, weight=1)
        button_frame.columnconfigure(1, weight=0)
        button_frame.columnconfigure(2, weight=1)

        self.start_button = HoverButton(button_frame, image_path=r'widgets/begin.png', command=self._start,
                                        text='Extract', compound='center', font=("Arial", 10, "bold"), bg=self.background,
                                        bd=0, highlightthickness=0, activebackground=self.background)
        self.start_button.grid(row=0, column=1)

        self.logger = Logger(main_frame, bg=self.background, bd=0, relief=SUNKEN)
        self.logger.grid(row=1, column=0, sticky='news')

    def _extract(self):
        self.logger.log("Extracting information from invoices...\n")

        predictions = {}
        for key in FIELDS:
            if self.checkboxes[key].get():
                test_data = RealData(field=key, data_dir=os.path.join(self.args["prepared_data"], 'predict/'))
                model = AttendCopyParse(field=key, test_data=test_data, batch_size=1, restore=True)
                preds = model.test_set(out_path=self.args["pred_dir"])
                for file in preds.keys():
                    if file in predictions:
                        predictions[file][key] = preds[file][key]
                    else:
                        predictions[file] = preds[file]

        for file in predictions:
            self.logger.log("Invoice: {}".format('.'.join([file.split('.')[0], 'pdf'])))
            for key in predictions[file]:
                self.logger.log("  - {}: {}".format(key, predictions[file][key]))
            self.logger.log(" ")

        self.logger.log("Extracted information stored in '{}'".format(self.args["pred_dir"]))
        self.start_button.configure(state='normal')

    def _get_inputs(self):
        self.args["data_file"] = self.textboxes["data_file"].get("1.0", 'end-1c')
        self.args["data_dir"] = self.textboxes["data_dir"].get("1.0", 'end-1c')
        self.args["prepared_data"] = self.textboxes["prepared_data"].get("1.0", 'end-1c')
        self.args["pred_dir"] = self.textboxes["pred_dir"].get("1.0", 'end-1c')
        if not self.args["prepared_data"].endswith('/'):
            self.args["prepared_data"] += '/'
        if not self.args["pred_dir"].endswith('/'):
            self.args["pred_dir"] += '/'
        if self.args["data_dir"] == '':
            return
        if not self.args["data_dir"].endswith('/'):
            self.args["data_dir"] += '/'

    def _start(self):
        self._get_inputs()

        if not os.path.exists(self.args["prepared_data"]):
            messagebox.showerror("Error", "Prepared data folder does not exist!")
            return

        files = glob.glob(self.args["prepared_data"] + "**/*.json", recursive=True)
        if not files:
            messagebox.showerror("Error",
                                 "Could not find processed data in \"{}\". Did you prepare data for extraction?".format(
                                     self.args["prepared_data"]))
            return

        selected = False
        for key in FIELDS:
            if self.checkboxes[key].get():
                selected = True
                break

        if not selected:
            messagebox.showerror("Error", "No fields were selected!")
            return

        if not self.running:
            self.running = True
            self.thread = StoppableThread(target=self._extract)
            self.thread.daemon = True
            self.thread.start()
            self.start_button.configure(state='disabled')

    def _open(self, key):
        if key == 'data_file':
            path = filedialog.askopenfilename(initialdir='.', title="Select Invoice File",
                                              filetypes=[("PDF files", "*.pdf")])
        else:
            path = filedialog.askdirectory(initialdir='.', title="Select Directory Containing Invoices")
        if not path:
            return
        self.args[key] = path
        self.textboxes[key].delete('1.0', END)
        self.textboxes[key].insert('1.0', self.args[key])

    def _prepare_data(self):
        self._get_inputs()

        if self.args["data_dir"] == '':
            messagebox.showerror("Error", "No files were selected!")
            return

        if not os.path.exists(self.args["data_dir"]):
            messagebox.showerror("Error", "No files were selected!")
            return

        self.progressbar["value"] = 0
        self.progress_label.configure(text="Preparing Data:")

        data_dir = os.path.join(self.args["prepared_data"], 'predict')
        os.makedirs(data_dir, exist_ok=True)

        filenames = [os.path.abspath(f) for f in glob.glob(data_dir + "**/*.json", recursive=True)]
        filenames += [os.path.abspath(f) for f in glob.glob(data_dir + "**/*.png", recursive=True)]
        for f in filenames:
            os.remove(f)

        filenames = []
        if self.args["data_dir"] and os.path.exists(self.args["data_dir"]):
            filenames = [os.path.abspath(f) for f in glob.glob(self.args["data_dir"] + "**/*.pdf", recursive=True)]
        if self.args["data_file"] and os.path.exists(self.args["data_file"]):
            filenames += [self.args["data_file"]]

        self.logger.log("Total: {}".format(len(filenames)))
        self.logger.log("Preparing data for extraction...")

        total_samples = len(filenames)
        sample_idx = 0
        for filename in tqdm(filenames):
            try:
                page = pdf2image.convert_from_path(filename)[0]
                page.save(os.path.join(data_dir, os.path.basename(filename)[:-3] + 'png'))

                height = page.size[1]
                width = page.size[0]

                ngrams = util.create_ngrams(page)
                for ngram in ngrams:
                    if "amount" in ngram["parses"]:
                        ngram["parses"]["amount"] = util.normalize(ngram["parses"]["amount"], key="amount")
                    if "date" in ngram["parses"]:
                        ngram["parses"]["date"] = util.normalize(ngram["parses"]["date"], key="date")

                fields = {field: '0' for field in FIELDS}

                data = {
                    "fields": fields,
                    "nGrams": ngrams,
                    "height": height,
                    "width": width,
                    "filename": os.path.abspath(os.path.join(data_dir, os.path.basename(filename)[:-3] + 'png'))
                }

                with open(os.path.join(data_dir, os.path.basename(filename)[:-3] + 'json'),
                          'w') as fp:
                    fp.write(simplejson.dumps(data, indent=2))

            except Exception as exp:
                self.logger.log("Skipping {} : {}".format(filename, exp))

            sample_idx += 1
            self.progress_label.configure(text="Preparing data [{}/{}]:".format(sample_idx, total_samples))
            self.progressbar["value"] = (sample_idx / total_samples) * 100
            self.progressbar.update()

        self.progress_label.configure(text="Completed!")
        self.progressbar["value"] = 100
        self.progressbar.update()
        self.logger.log("Prepared data stored in '{}'".format(data_dir))
コード例 #9
0
class main_calcul:
    def __init__(self,import_XRD,angles_modif,main):
        try:
            self.process(import_XRD,angles_modif,main)
        except Exception as e:
            showinfo(title="Warning",message=str(e)+"\n"+"\n"+str(traceback.format_exc()))
            return
                
        main.root.mainloop()

    def process(self,import_XRD,angles_modif,main):
        for widget in main.Frame1_2.winfo_children():
            widget.destroy()       
        Label(main.Frame1_2,text="Caculation").pack(side=LEFT)
        self.progress = Progressbar(main.Frame1_2,orient="horizontal",mode='determinate')
        self.progress.pack(side=LEFT)
        self.progress["value"] = 0
        self.progress["maximum"] = len(import_XRD.phi)+7

        self.check_angles_modif(angles_modif,import_XRD)
        self.check_peak_shift_correction(import_XRD)
        #----------------------------------------
        self.progress["value"] = self.progress["value"]+1
        self.progress.update()
        self.test_interval(import_XRD)
        #----------------------------------------
        self.progress["value"] = self.progress["value"]+1
        self.progress.update()
        self.test_material(import_XRD)
        #----------------------------------------
        self.progress["value"] = self.progress["value"]+1
        self.progress.update()
        self.test_x_ray(import_XRD)
        #----------------------------------------
        if self.interval_valid==True and self.material_valid==True and self.x_ray_valid==True:
            self.destroy_widget(main)
            self.peak_finder(import_XRD,angles_modif,main)
            #-------------------------------------------
            self.progress["value"] = self.progress["value"]+1
            self.progress.update()
            self.show_fitting_frame(import_XRD,stress_calcul,main)
            #-------------------------------------------
            self.progress["value"] = self.progress["value"]+1
            self.progress.update()
            stress_calcul.method_sin2psi(stress_calcul,self)
            #-------------------------------------------
            self.progress["value"] = self.progress["value"]+1
            self.progress.update()
            stress_calcul.method_fundamental(stress_calcul,self)
            #-------------------------------------------
            if stress_calcul.stress_valid>=1:
                self.progress["value"] = self.progress["value"]+1
                self.progress.update()
                self.show_stress_graph(stress_calcul,import_XRD,main)
            if stress_calcul.stress_valid>=2:
                self.progress["value"] = self.progress["value"]+1
                self.progress.update()
                self.show_stress_tensor(stress_calcul,main)
            self.progress["value"] = self.progress["value"]+1
            self.progress.update()
            self.show_variation_peak(stress_calcul,main)

            for widget in main.Frame1_2.winfo_children():
                widget.destroy()

            if stress_calcul.stress_valid>=1:
                pack_Frame_1D(main,5)
            else:
                pack_Frame_1D(main,4)
    
    def check_angles_modif(self,angles_modif,import_XRD):
        if import_XRD.angles_modif_valid==True:
            self.phi=angles_modif.phi*1
            self.chi=angles_modif.chi*1
            self.omega=angles_modif.omega*1
            self.twotheta=angles_modif.twotheta*1
            self.data_x=angles_modif.data_x*1
        else:
            self.phi=import_XRD.phi*1
            self.chi=import_XRD.chi*1
            self.omega=import_XRD.omega*1
            self.twotheta=import_XRD.twotheta*1
            self.data_x=import_XRD.data_x*1

    def check_peak_shift_correction(self,import_XRD):
        self.peak_shift_correction_coefficient=import_XRD.peak_shift_correction_coefficient*1
#---------------------------------        
    def test_interval(self,import_XRD):
        self.interval_valid=False
        #test_entry_number
        try:
            twotheta_f=float(import_XRD.Entry_twotheta_from.get())
            twotheta_t=float(import_XRD.Entry_twotheta_to.get())

            background_f=((import_XRD.Entry_background_from.get()).rstrip(',')).split(',')
            background_t=((import_XRD.Entry_background_to.get()).rstrip(',')).split(',')
            for i in range(len(background_f)):
                background_f[i]=float(background_f[i])
                background_t[i]=float(background_t[i])
            self.background_polynominal_degrees=int(import_XRD.Entry_background_polynominal_degrees.get())
        except Exception:
            showinfo(title="Error",message="Please insert all the limit parameters and verify that they are number\nPlease use '.' instead of ',' to insert a number")
            return

        #find index limit           
        twotheta_f_index=(np.abs(np.asarray(self.data_x[0])-twotheta_f)).argmin()
        twotheta_t_index=(np.abs(np.asarray(self.data_x[0])-twotheta_t)).argmin()

        background_f_index=[]
        background_t_index=[]
        for i in range(len(background_f)):
            background_f_index.append((np.abs(np.asarray(self.data_x[0])-background_f[i])).argmin())
            background_t_index.append((np.abs(np.asarray(self.data_x[0])-background_t[i])).argmin())

        self.twotheta_f_index=min(twotheta_f_index,twotheta_t_index)
        self.twotheta_t_index=max(twotheta_f_index,twotheta_t_index)
        self.background_f_index=[]
        self.background_t_index=[]
        for i in range(len(background_f_index)):
            self.background_f_index.append(min(background_f_index[i],background_t_index[i]))
            self.background_t_index.append(max(background_f_index[i],background_t_index[i]))

        #append limit
        data_x_limit=self.data_x[0][self.twotheta_f_index:self.twotheta_t_index]
        if len(data_x_limit)==0:
            showinfo(title="Error",message="Limits out of range")
            return

        #check peaks reference
        self.peaks_position_ref=[]
        self.peaks_limit=[]
        self.peaks_width=[]
        
        try:
            self.peaks_position_ref.append(float(import_XRD.Entry_peak[0].get()))
        except Exception:
            try:
                self.peaks_position_ref.append(float(import_XRD.Entry_twotheta0.get()))
            except Exception:
                return

        try:
            self.peaks_limit.append(float(import_XRD.Entry_limit_peak[0].get()))
        except Exception:
            self.peaks_limit.append(1)

        try:
            self.peaks_width.append(float(import_XRD.Entry_peak_width[0].get()))
        except Exception:
            self.peaks_width.append(1)

        if len(import_XRD.Entry_peak)==2:
            position_ref=((import_XRD.Entry_peak[1].get()).rstrip(',')).split(',')
            for i in range(len(position_ref)):
                try:
                    self.peaks_position_ref.append(float(position_ref[i]))
                except Exception:
                    pass
                
        #find index peaks reference
        for i in range(len(self.peaks_position_ref)):
            index=(np.abs(np.asarray(data_x_limit)-self.peaks_position_ref[i])).argmin()
            if index==0 or index==len(data_x_limit)-1:
                showinfo(title="Error",message="Peak out of limit")
                return

        #find other informations
        if len(import_XRD.Entry_peak)==2:
            limit_peak=((import_XRD.Entry_limit_peak[1].get()).rstrip(',')).split(',')
            peak_width=((import_XRD.Entry_peak_width[1].get()).rstrip(',')).split(',')
            for i in range(1,len(self.peaks_position_ref)):
                try:
                    self.peaks_limit.append(float(limit_peak[i]))
                except Exception:
                    self.peaks_limit.append(1)

                try:
                    self.peaks_width.append(float(peak_width[i]))
                except Exception:
                    self.peaks_width.append(1)

        self.interval_valid=True
#----------------------------------------------------
    def test_material(self,import_XRD):
        #check material
        self.material_valid=False
        try:
            self.twotheta0=float(import_XRD.Entry_twotheta0.get())
        except Exception:
            showinfo(title="Error",message=u"Please check the value of unstressed 2\u03B8")
            return
        else:
            try:
                self.s1=float(import_XRD.Entry_s1.get())
                self.s2_2=float(import_XRD.Entry_half_s2.get())
            except Exception:
                try:
                    Young=float(import_XRD.Entry_Young.get())
                    Poisson=float(import_XRD.Entry_Poisson.get())
                except Exception:
                    showinfo(title="Error",message="Please check the value of (s1,s2/2) or (E,v)")
                    return

                self.s1=-Poisson/Young
                self.s2_2=(Poisson+1)/Young
                self.material_valid=True
            
        self.material_valid=True
#----------------------------------------------------
    def test_x_ray(self,import_XRD):
        self.x_ray_valid=False
        try:
            self.kalpha_1=float(import_XRD.Entry_kalpha[0].get())
            self.kalpha_2=float(import_XRD.Entry_kalpha[1].get())
            self.kalpha_ratio=float(import_XRD.Entry_kalpha[2].get())
        except Exception:
            showinfo(title="Error",message="Please check the value of X-ray propreties")
            return
        self.x_ray_valid=True
    
#--------------------------------------------------
    def destroy_widget(self,main):
        for widget in main.Frame3_4_1.winfo_children():
            widget.destroy()
        for widget in main.Frame3_4_2_1.winfo_children():
            widget.destroy()
        for widget in main.Frame3_4_2_2.winfo_children():
            widget.destroy()
        for widget in main.Frame3_4_3_1.winfo_children():
            widget.destroy()
        for widget in main.Frame3_4_3_2.winfo_children():
            widget.destroy()
        for widget in main.Frame3_5_1.winfo_children():
            widget.destroy()
        for widget in main.Frame3_5_2_1.winfo_children():
            widget.destroy()
        for widget in main.Frame3_5_2_2.winfo_children():
            widget.destroy()
        for widget in main.Frame3_5_2_3.winfo_children():
            widget.destroy()
        for widget in main.Frame3_5_3_1.winfo_children():
            widget.destroy()
        for widget in main.Frame3_5_3_2.winfo_children():
            widget.destroy()
        for widget in main.Frame3_6_1.winfo_children():
            widget.destroy()
        for widget in main.Frame3_6_2.winfo_children():
            widget.destroy()
        for widget in main.Frame3_6_3.winfo_children():
            widget.destroy()
        for widget in main.Frame3_7_1.winfo_children():
            widget.destroy()
        for widget in main.Frame3_7_2.winfo_children():
            widget.destroy()

    def destroy_widget_2(self,main):
        for widget in main.Frame3_5_1.winfo_children():
            widget.destroy()
        for widget in main.Frame3_5_2_2.winfo_children():
            widget.destroy()
        for widget in main.Frame3_5_2_3.winfo_children():
            widget.destroy()
        for widget in main.Frame3_5_3_1.winfo_children():
            widget.destroy()
        for widget in main.Frame3_5_3_2.winfo_children():
            widget.destroy()
        for widget in main.Frame3_6_1.winfo_children():
            widget.destroy()
        for widget in main.Frame3_6_2.winfo_children():
            widget.destroy()
        for widget in main.Frame3_6_3.winfo_children():
            widget.destroy()
        for widget in main.Frame3_7_1.winfo_children():
            widget.destroy()
        for widget in main.Frame3_7_2.winfo_children():
            widget.destroy()
#--------------------------------------------------    
    def peak_finder(self,import_XRD,angles_modif,main):
        self.data_y_background_fit=[]
        self.data_y_limit=[]
        self.data_x_limit=[]
        self.data_y_net=[]
        self.data_y_fit=[]
        self.data_y_k1_fit=[]
        self.data_y_k2_fit=[]
        self.data_y_fit_total=[]
        self.peaks_position=[]
        self.error_peaks_position=[]
        self.peak_intensity=[]
        self.error_peak_intensity=[]
        self.FWHM=[]
        self.error_FWHM=[]
        self.a=[]
        self.r=[]
        self.peak_non_valide=[]
        self.peak_rejection=[]

        try:
            r=float(import_XRD.Entry_r.get())
        except Exception:
            r=0

        for i in range(len(import_XRD.phi)):
            self.progress["value"] = self.progress["value"]+1
            self.progress.update()
            #-------------------------------------------
            try:
                data_y_limit=import_XRD.data_y[i][self.twotheta_f_index:self.twotheta_t_index]
                data_x_limit=self.data_x[i][self.twotheta_f_index:self.twotheta_t_index]       
                self.data_y_limit.append(data_y_limit)
                self.data_x_limit.append(data_x_limit)


                background_data_y_limit=[]
                background_data_x_limit=[]
                for j in range(len(self.background_f_index)):
                    for k in range(self.background_f_index[j],self.background_t_index[j]):
                        background_data_y_limit.append(import_XRD.data_y[i][k])
                        background_data_x_limit.append(self.data_x[i][k])
                background_fit_coefficient=np.polyfit(background_data_x_limit,background_data_y_limit,self.background_polynominal_degrees)
            except Exception:
                self.data_y_background_fit.append([])
                self.data_y_net.append([])
                self.append_zero()
                self.peak_non_valide.append(i+1)
            else:
                data_y_background_fit=[]
                for j in range(len(data_x_limit)):
                    data_y_background_fit_i=0
                    for k in range(self.background_polynominal_degrees+1):
                        data_y_background_fit_i=data_y_background_fit_i+background_fit_coefficient[k]*data_x_limit[j]**(self.background_polynominal_degrees-k)
                    data_y_background_fit.append(data_y_background_fit_i)

                data_y_net=list(np.array(data_y_limit)-np.array(data_y_background_fit))

                self.data_y_background_fit.append(data_y_background_fit)
                self.data_y_net.append(data_y_net)

                init_guess=float(import_XRD.init_guess.get())
                p0_guess=initial_guess(data_y_net,data_x_limit,self.peaks_position_ref,self.peaks_limit,self.peaks_width,init_guess)
                peak_shape=float(import_XRD.peak_shape.get())
                function_fit=import_XRD.function_fit.get()

                peak_fit_result=peak_fit(data_y_net,data_x_limit,self.kalpha_1,self.kalpha_2,self.kalpha_ratio,p0_guess,peak_shape,function_fit)
                    
                if len(peak_fit_result)==0:
                    self.append_zero()
                    self.peak_non_valide.append(i+1)
                else:
                    self.peaks_position.append(peak_fit_result[0][0])
                    self.error_peaks_position.append(peak_fit_result[1][0])
                    self.peak_intensity.append(peak_fit_result[2][0])
                    self.error_peak_intensity.append(peak_fit_result[3][0])
                    self.FWHM.append(peak_fit_result[4][0])
                    self.error_FWHM.append(peak_fit_result[5][0])
                    self.data_y_fit_total.append(peak_fit_result[6])
                    self.data_y_k1_fit.append(peak_fit_result[7])
                    self.data_y_k2_fit.append(peak_fit_result[8])
                    self.r.append(peak_fit_result[9])
                    self.a.append(peak_fit_result[10][0])
                    self.data_y_fit.append(peak_fit_result[11])
                    if self.r[i]<r:
                        self.peak_rejection.append(i+1)

        self.data_x_limit_init=self.data_x_limit*1
        self.peaks_position_init=self.peaks_position*1
        
        self.Entry_peak_non_valide=Entry(main.Frame3_5_2_1,width=100)
        self.Entry_peak_rejection=Entry(main.Frame3_5_2_1,width=100)
        self.Entry_peak_remove=Entry(main.Frame3_5_2_1,width=100)
        for i in range(len(self.peak_non_valide)):
            self.Entry_peak_non_valide.insert(END,str(self.peak_non_valide[i])+",")
        for i in range(len(self.peak_rejection)):
            self.Entry_peak_rejection.insert(END,str(self.peak_rejection[i])+",")
 #--------------------------------------------------
    def show_fitting_frame(self,import_XRD,stress_calcul,main):       
        self.original = IntVar()
        Check_button=Checkbutton(main.Frame3_4_3_2, text="Original intensity", variable=self.original)
        Check_button.grid(row=0,column=0,sticky=W)
        Check_button.select()
        
        self.background = IntVar()
        Check_button=Checkbutton(main.Frame3_4_3_2, text="Background", variable=self.background)
        Check_button.grid(row=1,column=0,sticky=W)
        Check_button.select()
        
        self.net_intensity = IntVar()
        Check_button=Checkbutton(main.Frame3_4_3_2, text="Net intensity", variable=self.net_intensity)
        Check_button.grid(row=2,column=0,sticky=W)
        Check_button.select()
        
        self.I_alpha1 = IntVar()
        Check_button=Checkbutton(main.Frame3_4_3_2, text=u"I (\u03BB\u2081)", variable=self.I_alpha1)
        Check_button.grid(row=3,column=0,sticky=W)
        Check_button.select()
        
        self.I_alpha2 = IntVar()
        Check_button=Checkbutton(main.Frame3_4_3_2, text=u"I (\u03BB\u2082)", variable=self.I_alpha2)
        Check_button.grid(row=4,column=0,sticky=W)
        Check_button.select()
        
        self.I_total = IntVar()
        Check_button=Checkbutton(main.Frame3_4_3_2, text="I fit total", variable=self.I_total)
        Check_button.grid(row=5,column=0,sticky=W)
        Check_button.select()
       
        scrollbar = Scrollbar(main.Frame3_4_1)
        scrollbar.pack( side = RIGHT, fill=Y)
        mylist = Listbox(main.Frame3_4_1, yscrollcommand = scrollbar.set)
        for i in range(len(self.phi)):
            mylist.insert(END, str(i+1)+u".\u03C6="+str(float(self.phi[i]))+u"; \u03C7="+str(float(self.chi[i]))+u"; \u03C9="+str(float(self.omega[i])))
        mylist.pack( side = LEFT, fill = BOTH,expand=YES)
        mylist.bind("<ButtonRelease-1>", lambda event: show_fit_graph(event,self,stress_calcul,main))
        scrollbar.config( command = mylist.yview )

        for i in range(len(self.phi)):
            if str(i+1) in self.peak_non_valide or str(i+1) in self.peak_rejection:
                continue
            fig=plt.figure(facecolor="0.94")
            plt.xlabel(r"$2\theta$")
            plt.ylabel("Intensity")
            plt.title(u"\u03C6="+str(float(self.phi[i]))+u"; \u03C7="+str(float(self.chi[i])))
            plt.plot(self.data_x_limit[i],self.data_y_limit[i],'ro',markersize=2,label='Original intensity')
            plt.plot(self.data_x_limit[i],self.data_y_background_fit[i],'k',label='Background')
            plt.plot(self.data_x_limit[i],self.data_y_net[i],'go',markersize=2,label='Net intensity')
            x=[self.peaks_position[i],self.peaks_position[i]]
            y=[min(self.data_y_net[i]),max(self.data_y_limit[i])]        
            plt.plot(self.data_x_limit[i],self.data_y_k1_fit[i],'b',label=r"I($\lambda_{1}$)")
            plt.plot(self.data_x_limit[i],self.data_y_k2_fit[i],'c',label=r"I($\lambda_{2}$)")
            plt.plot(self.data_x_limit[i],self.data_y_fit_total[i],'m',label=r"I($\lambda_{1}$)"+r" + I($\lambda_{2}$)")
            plt.plot(x,y,'b--',label=r"peak 2$\theta_{1}$ = "+str('%0.2f' % self.peaks_position[i])+"°")      
            plt.legend(loc='upper left', bbox_to_anchor=(-0.1, -0.2, 1.2, 0),ncol=3,mode="expand",borderaxespad=0.)
            plt.subplots_adjust(bottom=0.3)
            plt.close()
            
            canvas = FigureCanvasTkAgg(fig, master=main.Frame3_4_2_1)
            canvas.get_tk_widget().pack(fill=BOTH,expand=YES)
            break

        Button(main.Frame3_4_3_1, text = 'Export all as image',bg="white", command = lambda: export_all_fit_graph(self,main)).pack(side=TOP,padx=10, pady=10)
        Button(main.Frame3_4_3_1, text = 'Export all as text',bg="white", command = lambda: export_all_fit_data(self,main)).pack(side=TOP,padx=10, pady=10)

        fig_style(self,main.Frame3_4_3_3)

    #---------------------------------
    def modification_stress(self,import_XRD,angles_modif,main):
        for widget in main.Frame1_2.winfo_children():
            widget.destroy()
 
        Label(main.Frame1_2,text="Caculation").pack(side=LEFT)
        self.progress = Progressbar(main.Frame1_2,orient="horizontal",mode='determinate')
        self.progress.pack(side=LEFT)
        self.progress["value"] = 0
        self.progress["maximum"] = len(import_XRD.phi)+7

        self.check_angles_modif(angles_modif,import_XRD)
        self.check_peak_shift_correction(import_XRD)
        #----------------------------------------
        self.progress["value"] = self.progress["value"]+1
        self.progress.update()
        self.test_interval(import_XRD)
        #----------------------------------------
        self.progress["value"] = self.progress["value"]+1
        self.progress.update()
        self.test_material(import_XRD)
        #----------------------------------------
        self.progress["value"] = self.progress["value"]+1
        self.progress.update()
        self.test_x_ray(import_XRD)
        #----------------------------------------
        if self.interval_valid==True and self.material_valid==True and self.x_ray_valid==True:
            self.destroy_widget_2(main)
            #-------------------------------------------
            self.progress["value"] = self.progress["value"]+1
            self.progress.update()
            stress_calcul.method_sin2psi(stress_calcul,self)
            #-------------------------------------------
            self.progress["value"] = self.progress["value"]+1
            self.progress.update()
            stress_calcul.method_fundamental(stress_calcul,self)
            #-------------------------------------------
            if stress_calcul.stress_valid>=1:
                self.progress["value"] = self.progress["value"]+1
                self.progress.update()
                self.show_stress_graph(stress_calcul,import_XRD,main)
            if stress_calcul.stress_valid>=2:
                self.progress["value"] = self.progress["value"]+1
                self.progress.update()
                self.show_stress_tensor(stress_calcul,main)
            self.progress["value"] = self.progress["value"]+1
            self.progress.update()
            self.show_variation_peak(stress_calcul,main)

            for widget in main.Frame1_2.winfo_children():
                widget.destroy()

            if stress_calcul.stress_valid>=1:
                pack_Frame_1D(main,5)
            else:
                pack_Frame_1D(main,4)

        main.root.mainloop()
    #-----------------------------------------------------
    def show_stress_graph(self,stress_calcul,import_XRD,main):      
        self.experimental = IntVar()
        Check_button=Checkbutton(main.Frame3_5_3_2, text="Experimental", variable=self.experimental)
        Check_button.grid(row=0,column=0,sticky=W)
        Check_button.select()

        self.annotate = IntVar()
        Check_button=Checkbutton(main.Frame3_5_3_2, text="Annotate", variable=self.annotate)
        Check_button.grid(row=1,column=0,sticky=W)
        Check_button.select()

        if stress_calcul.stress_valid>=1:
            self.sin2khi_method = IntVar()
            Check_button=Checkbutton(main.Frame3_5_3_2, text=u'Sin\u00B2\u03A8 method', variable=self.sin2khi_method)
            Check_button.grid(row=2,column=0,sticky=W)
            Check_button.select()

            self.fundamental_method = IntVar()
            Check_button=Checkbutton(main.Frame3_5_3_2, text="Fundamental method", variable=self.fundamental_method)
            Check_button.grid(row=3,column=0,sticky=W)
            Check_button.select()
        
        #--Frame3_5-----------------------------------------------------    
        scrollbar = Scrollbar(main.Frame3_5_1)
        scrollbar.pack( side = RIGHT, fill=Y)                               
        mylist = Listbox(main.Frame3_5_1, yscrollcommand = scrollbar.set )
        for i in range(len(stress_calcul.liste_phi)):
            mylist.insert(END, str(i+1)+u".\u03D5="+str(float(stress_calcul.liste_phi[i])))
        mylist.pack( side = LEFT, fill = BOTH )
        mylist.bind("<ButtonRelease-1>", lambda event: show_stress_graph(event,self,stress_calcul,main))
        scrollbar.config( command = mylist.yview )

        Label(main.Frame3_5_2_1, text="(Peak number)(1,2,3,...)").grid(row=0,column=1,sticky=W)
        Label(main.Frame3_5_2_1, text="Graph non valide").grid(row=1,column=0,sticky=W)
        self.Entry_peak_non_valide.grid(row=1,column=1,sticky=W)
        self.Entry_peak_non_valide.config(state='disabled')
        Label(main.Frame3_5_2_1, text="Peak rejection").grid(row=2,column=0,sticky=W)
        self.Entry_peak_rejection.grid(row=2,column=1,sticky=W)
        self.Entry_peak_rejection.config(state='disabled')
        Label(main.Frame3_5_2_1, text="Remove peaks",bg="white").grid(row=3,column=0,sticky=W)
        self.Entry_peak_remove.grid(row=3,column=1,sticky=W)
        Button(main.Frame3_5_2_1,compound=CENTER, text="APPLY MODIFICATION",bg="white",command=lambda:self.modification_stress(import_XRD,angles_modif,main)).grid(row=4,column=1,sticky=W)

        Label(main.Frame3_5_2_2, text="Stress behaviour").grid(row=0,column=0,sticky=W)
        self.stress_behaviour = IntVar()
        Radiobutton(main.Frame3_5_2_2, text="No Shear", variable=self.stress_behaviour, value=1).grid(row=1,column=0,sticky=W)
        Radiobutton(main.Frame3_5_2_2, text="Shear", variable=self.stress_behaviour, value=2).grid(row=2,column=0,sticky=W)
        self.stress_behaviour.set(1)

        self.stress_dimension = IntVar()
        self.stress_dimension.set(2)
        if len(stress_calcul.liste_phi)>=3:
            Label(main.Frame3_5_2_2, text="Stress dimension").grid(row=0,column=1,sticky=W)
            Radiobutton(main.Frame3_5_2_2, text="Biaxial", variable=self.stress_dimension, value=2).grid(row=1,column=1,sticky=W)
            Radiobutton(main.Frame3_5_2_2, text="Triaxial", variable=self.stress_dimension, value=3).grid(row=2,column=1,sticky=W)
        
        Frame_a=Frame(main.Frame3_5_2_3)
        Frame_a.pack(fill=BOTH, expand=YES)
        Frame_b=Frame(main.Frame3_5_2_3)
        Frame_b.pack(fill=BOTH, expand=YES)

        if stress_calcul.stress_valid>=1:
            Label(Frame_a,text=u'STRESS AT \u03D5='+str(stress_calcul.liste_phi[0])).grid(row=0,column=0,sticky=W)
            Label(Frame_a,text="Unit: MPa").grid(row=0,column=1,sticky=W)
            Label(Frame_a,text=u'Sin\u00B2\u03A8 method').grid(row=1,column=0,sticky=W)
            Label(Frame_a,text=u'\u03C3\u03D5= '+str('%0.1f' % stress_calcul.sigma_phi_linear[0])+u"\u00B1"+str('%0.1f' % stress_calcul.error_sigma_phi_linear[0])).grid(row=2,column=0,sticky=W)
               
        if len(stress_calcul.liste_phi)>=1:
            Label(Frame_a,text=u'   Fundamental method').grid(row=1,column=2,sticky=W)
            if stress_calcul.length_strain>=3:
                Label(Frame_a,text=u'   \u03C3\u03D5= '+str('%0.1f' % stress_calcul.sigma_phi_biaxial[0])+u"\u00B1"+str('%0.1f' % stress_calcul.error_sigma_phi_biaxial[0])).grid(row=2,column=2,sticky=W)
            
        fig=plt.figure(facecolor="0.94")
        ax = fig.add_subplot(111)  
        plt.plot(stress_calcul.sinpsi_2[0],stress_calcul.strain[0],'ro',label='Experimental')
        for j in range(len(stress_calcul.psi[0])):
            plt.annotate(str(stress_calcul.index_psi[0][j]),xy=(stress_calcul.sinpsi_2[0][j],stress_calcul.strain[0][j]))

        if stress_calcul.stress_valid>=1:
            plt.plot(stress_calcul.sinpsi_2_sorted[0],stress_calcul.strain_linear_fit[0],'b',label=u'Sin\u00B2\u03A8 method')
                
        if len(stress_calcul.liste_phi)>=1:
            if stress_calcul.length_strain>=3:
                plt.plot(stress_calcul.sinpsi_2_sorted[0],stress_calcul.strain_biaxial[0],'m',label='Fundamental method')
                
        plt.xlabel(r"$sin^{2}\psi$")
        plt.ylabel('Elastic strain '+r"$\varepsilon$")
        plt.title(u"\u03D5="+str(stress_calcul.liste_phi[0]))
        plt.legend(loc='upper left', bbox_to_anchor=(0.0, -0.3, 1, 0),ncol=3,mode="expand",borderaxespad=0.)
        plt.subplots_adjust(bottom=0.4)
        plt.subplots_adjust(left=0.2)
        plt.close()
                             
        canvas = FigureCanvasTkAgg(fig, master=Frame_b)
        canvas.get_tk_widget().pack(fill=BOTH, expand=YES)

        fig_style(stress_calcul,main.Frame3_5_3_3)

        Button(main.Frame3_5_3_1, text = 'Export all as image',bg="white", command = lambda: export_all_stress_graph(self,stress_calcul,main)).pack(side=TOP,padx=10, pady=10)
        Button(main.Frame3_5_3_1, text = 'Export all as text',bg="white", command = lambda:export_all_stress_data(self,stress_calcul,main)).pack(side=TOP,padx=10, pady=10)      

    def show_stress_tensor(self,stress_calcul,main):
        self.selection="Biaxial"
        scrollbar = Scrollbar(main.Frame3_6_1)
        scrollbar.pack( side = RIGHT, fill=Y)                               
        mylist = Listbox(main.Frame3_6_1, yscrollcommand = scrollbar.set )
        if stress_calcul.length_strain>=3:
            mylist.insert(END, "Biaxial")
        if stress_calcul.length_strain>=5:
            mylist.insert(END, "Biaxial+shear")
        if stress_calcul.length_strain>=6:
            mylist.insert(END, "Triaxial")
        mylist.pack( side = LEFT, fill = BOTH )
        mylist.bind("<ButtonRelease-1>", lambda event: show_stress_tensor(event,stress_calcul,main))
        scrollbar.config( command = mylist.yview )
        #------------------------------------
        Frame_a=Frame(main.Frame3_6_2)
        Frame_a.pack(fill=BOTH, expand=YES)
        Frame_b=Frame(main.Frame3_6_2)
        Frame_b.pack(fill=BOTH, expand=YES)
        
        Label(Frame_a,text="STRESS TENSOR - Biaxial").grid(row=0,column=0,sticky=W)
        Label(Frame_a,text="Unit: MPa").grid(row=0,column=2,sticky=W)
        Label(Frame_a,text=u'Sin\u00B2\u03A8 method').grid(row=1,column=0,sticky=W)
        if stress_calcul.stress_valid>=2:
            Label(Frame_a,text=u'\u03C3\u2081\u2081= '+str('%0.1f' % stress_calcul.tensor_biaxial_1[0][0])+u"\u00B1"+str('%0.1f' % np.sqrt(stress_calcul.tensor_biaxial_1[1][0,0]))).grid(row=2,column=0,sticky=W)
            Label(Frame_a,text=u'\u03C3\u2081\u2082= '+str('%0.1f' % stress_calcul.tensor_biaxial_1[0][1])+u"\u00B1"+str('%0.1f' % np.sqrt(stress_calcul.tensor_biaxial_1[1][1,1]))).grid(row=2,column=1,sticky=W)
            Label(Frame_a,text=u'\u03C3\u2082\u2081= '+str('%0.1f' % stress_calcul.tensor_biaxial_1[0][1])+u"\u00B1"+str('%0.1f' % np.sqrt(stress_calcul.tensor_biaxial_1[1][1,1]))).grid(row=3,column=0,sticky=W)
            Label(Frame_a,text=u'\u03C3\u2082\u2082= '+str('%0.1f' % stress_calcul.tensor_biaxial_1[0][2])+u"\u00B1"+str('%0.1f' % np.sqrt(stress_calcul.tensor_biaxial_1[1][2,2]))).grid(row=3,column=1,sticky=W)

            fig=plt.figure(facecolor="0.94")
            theta=np.arange(0,np.radians(361),np.radians(5))
            ax = fig.add_subplot(111, polar=True)
            plt.title("Simulation stress-phi")
            ax.plot(theta,np.negative(stress_calcul.all_sigma_phi_biaxial_1))
            ax.set_yticks([min(np.negative(stress_calcul.all_sigma_phi_biaxial_1)),max(np.negative(stress_calcul.all_sigma_phi_biaxial_1))])
            ax.set_yticklabels([str('%0.1f' % min(stress_calcul.all_sigma_phi_biaxial_1))+'MPa',str('%0.1f' % max(stress_calcul.all_sigma_phi_biaxial_1))+'MPa'])
            plt.close(fig)
                                     
            canvas = FigureCanvasTkAgg(fig, master=Frame_b)
            canvas.get_tk_widget().pack(fill=BOTH, expand=YES,side=TOP)
        #------------------------------------------------------
        if len(stress_calcul.liste_phi)>=2:
            Frame_c=Frame(main.Frame3_6_3)
            Frame_c.pack(fill=BOTH, expand=YES)
            Frame_d=Frame(main.Frame3_6_3)
            Frame_d.pack(fill=BOTH, expand=YES)
            
            Label(Frame_c,text="").grid(row=0,column=0,sticky=W)
            Label(Frame_c,text="Fundamental method").grid(row=1,column=0,sticky=W)
            Label(Frame_c,text=u'\u03C3\u2081\u2081= '+str('%0.1f' % stress_calcul.tensor_biaxial[0][0])+u"\u00B1"+str('%0.1f' % np.sqrt(stress_calcul.tensor_biaxial[1][0,0]))).grid(row=2,column=0,sticky=W)
            Label(Frame_c,text=u'\u03C3\u2081\u2082= '+str('%0.1f' % stress_calcul.tensor_biaxial[0][1])+u"\u00B1"+str('%0.1f' % np.sqrt(stress_calcul.tensor_biaxial[1][1,1]))).grid(row=2,column=1,sticky=W)
            Label(Frame_c,text=u'\u03C3\u2082\u2081= '+str('%0.1f' % stress_calcul.tensor_biaxial[0][1])+u"\u00B1"+str('%0.1f' % np.sqrt(stress_calcul.tensor_biaxial[1][1,1]))).grid(row=3,column=0,sticky=W)
            Label(Frame_c,text=u'\u03C3\u2082\u2082= '+str('%0.1f' % stress_calcul.tensor_biaxial[0][2])+u"\u00B1"+str('%0.1f' % np.sqrt(stress_calcul.tensor_biaxial[1][2,2]))).grid(row=3,column=1,sticky=W)
            
            fig=plt.figure(facecolor="0.94")
            plt.title("Simulation stress-phi")
            theta=np.arange(0,np.radians(361),np.radians(5))
            ax = fig.add_subplot(111, polar=True)
            ax.plot(theta,np.negative(stress_calcul.all_sigma_phi_biaxial))
            ax.set_yticks([min(np.negative(stress_calcul.all_sigma_phi_biaxial)),max(np.negative(stress_calcul.all_sigma_phi_biaxial))])
            ax.set_yticklabels([str('%0.1f' % min(stress_calcul.all_sigma_phi_biaxial))+'MPa',str('%0.1f' % max(stress_calcul.all_sigma_phi_biaxial))+'MPa'])
            plt.close(fig)
                                     
            canvas = FigureCanvasTkAgg(fig, master=Frame_d)
            canvas.get_tk_widget().pack(fill=BOTH, expand=YES,side=TOP)

    def show_variation_peak(self,stress_calcul,main):
        scrollbar = Scrollbar(main.Frame3_7_1)
        scrollbar.pack( side = RIGHT, fill=Y)                               
        mylist = Listbox(main.Frame3_7_1, yscrollcommand = scrollbar.set )
        mylist.insert(END, u"1.peak shift - \u03D5")
        mylist.insert(END, u"2.peak shift - \u03C8")
        mylist.pack( side = LEFT, fill = BOTH )
        mylist.bind("<ButtonRelease-1>", lambda event: show_other_info(event,self,stress_calcul,main))
        scrollbar.config( command = mylist.yview )
        
        fig=plt.figure(facecolor="0.94")
        plt.plot(stress_calcul.psi_calib,stress_calcul.peak_shift,'ro',label='peak shift')
        plt.xlabel(u"\u03C8(°)")
        plt.ylabel("peak shift(%)")
        plt.title("Variation of peak shift")
        plt.legend(loc='upper left', bbox_to_anchor=(-0.1, -0.2, 1.2, 0),ncol=3,mode="expand",borderaxespad=0.,fontsize='x-small')
        plt.subplots_adjust(bottom=0.3)
        plt.close(fig)
        
        canvas = FigureCanvasTkAgg(fig, master=main.Frame3_7_2)
        canvas.get_tk_widget().pack(side=TOP,fill=BOTH, expand=YES)

    def append_zero(self):
        self.peaks_position.append(float('NaN'))
        self.error_peaks_position.append(float('NaN'))
        self.peak_intensity.append(float('NaN'))
        self.error_peak_intensity.append(float('NaN'))
        self.FWHM.append(float('NaN'))
        self.error_FWHM.append(float('NaN'))
        self.data_y_fit_total.append([])
        self.data_y_k1_fit.append([])
        self.data_y_k2_fit.append([])
        self.data_y_fit.append([])
        self.r.append(float('NaN'))
        self.a.append(float('NaN'))
コード例 #10
0
def export_all_stress_data_2D(calib_2D, calcul_2D, stress_calcul, analyze_2D,
                              run_program):
    f = asksaveasfile(title="Export data",
                      mode='w',
                      defaultextension=".text",
                      filetypes=[('text files', '.txt'), ('all files', '.*')])
    if f is not None and f is not '':
        for widget in analyze_2D.Frame1_2.winfo_children():
            widget.destroy()
        Label(analyze_2D.Frame1_2, text="Export").pack(side=LEFT)
        progress = Progressbar(analyze_2D.Frame1_2,
                               orient="horizontal",
                               mode='determinate')
        progress.pack(side=LEFT)
        progress["value"] = 0
        progress["maximum"] = len(stress_calcul.phi_stress) + 2
        if stress_calcul.stress_valid >= 1:
            f.write("Linear fit\n")
            for i in range(len(stress_calcul.liste_phi)):
                f.write("Phi=" + str(stress_calcul.liste_phi[i]))
                f.write("; a=" + str(stress_calcul.a[i]))
                f.write("; b=" + str(stress_calcul.b[i]) + "\n")

        if stress_calcul.stress_valid == 1:
            f.write("FUNDAMENTAL METHOD \n")
            f.write("Uniaxial: " + "sigma= " +
                    str(stress_calcul.sigma_phi_uniaxial[0]) + "+/-" +
                    str(stress_calcul.error_sigma_phi_uniaxial[0]) + "MPa" +
                    "\n")
            f.write("Uniaxial+shear: " + "sigma= " +
                    str(stress_calcul.sigma_phi_uniaxial_shear[0]) + "+/-" +
                    str(stress_calcul.error_sigma_phi_uniaxial_shear[0]) +
                    "MPa" + "\n")
            f.write("Uniaxial+shear: " + "shear= " +
                    str(stress_calcul.shear_phi_uniaxial_shear[0]) + "+/-" +
                    str(stress_calcul.error_shear_phi_uniaxial_shear[0]) +
                    "MPa" + "\n")
            f.write("--------------\n")
            f.write("SIN2PSI METHOD\n")
            f.write("Linear fit: " + "sigma= " +
                    str(stress_calcul.sigma_phi_linear[0]) + "+/-" +
                    str(stress_calcul.error_sigma_phi_linear[0]) + "MPa" +
                    "\n")
            f.write("Elliptic fit: " + "sigma= " +
                    str(stress_calcul.sigma_phi_elliptic[0]) + "+/-" +
                    str(stress_calcul.error_sigma_phi_elliptic[0]) + "MPa" +
                    "\n")
            f.write("Elliptic fit: " + "shear= " +
                    str(stress_calcul.shear_phi_elliptic[0]) + "+/-" +
                    str(stress_calcul.error_shear_phi_elliptic[0]) + "MPa" +
                    "\n")

        if stress_calcul.stress_valid >= 2 and stress_calcul.sigma12_valid == False:
            progress["value"] = progress["value"] + 1
            progress.update()
            f.write('STRESS TENSOR' + "\n")
            f.write("---------------------------------------------------- \n")
            f.write("FUNDAMENTAL METHOD \n")
            f.write("---Biaxial stress----- \n")
            f.write('sigma 11 = ' +
                    str(stress_calcul.tensor_biaxial_simple[0][0]) + "+/-" +
                    str(stress_calcul.tensor_biaxial_simple[1][0, 0]**0.5) +
                    "MPa" + "\n")
            f.write('sigma 22 = ' +
                    str(stress_calcul.tensor_biaxial_simple[0][1]) + "+/-" +
                    str(stress_calcul.tensor_biaxial_simple[1][1, 1]**0.5) +
                    "MPa" + "\n")
            f.write("---------------------- \n")
            f.write("---Biaxial+shear stress----- \n")
            f.write('sigma 11 = ' +
                    str(stress_calcul.tensor_biaxial_simple_shear[0][0]) +
                    "+/-" +
                    str(stress_calcul.tensor_biaxial_simple_shear[1][0,
                                                                     0]**0.5) +
                    "MPa" + "\n")
            f.write('sigma 22 = ' +
                    str(stress_calcul.tensor_biaxial_simple_shear[0][1]) +
                    "+/-" +
                    str(stress_calcul.tensor_biaxial_simple_shear[1][1,
                                                                     1]**0.5) +
                    "MPa" + "\n")
            f.write('sigma 13 = sigma 31 = ' +
                    str(stress_calcul.tensor_biaxial_simple_shear[0][2]) +
                    "+/-" +
                    str(stress_calcul.tensor_biaxial_simple_shear[1][2,
                                                                     2]**0.5) +
                    "MPa" + "\n")
            f.write('sigma 23 = sigma 32 = ' +
                    str(stress_calcul.tensor_biaxial_simple_shear[0][3]) +
                    "+/-" +
                    str(stress_calcul.tensor_biaxial_simple_shear[1][3,
                                                                     3]**0.5) +
                    "MPa" + "\n")
            f.write('sigma 33 = 0MPa\n')
            f.write("---------------------------------------------------- \n")
            f.write("---------------------------------------------------- \n")
            f.write("SIN2PSI METHOD\n")
            f.write("---Biaxial stress----- \n")
            f.write('sigma 11 = ' +
                    str(stress_calcul.tensor_biaxial_simple_1[0][0]) + "+/-" +
                    str(stress_calcul.tensor_biaxial_simple_1[1][0, 0]**0.5) +
                    "MPa" + "\n")
            f.write('sigma 22 = ' +
                    str(stress_calcul.tensor_biaxial_simple_1[0][1]) + "+/-" +
                    str(stress_calcul.tensor_biaxial_simple_1[1][1, 1]**0.5) +
                    "MPa" + "\n")
            f.write("---------------------- \n")
            f.write("---Biaxial+shear stress----- \n")
            f.write('sigma 11 = ' +
                    str(stress_calcul.tensor_biaxial_simple_shear_1[0][0]) +
                    "+/-" + str(stress_calcul.tensor_biaxial_simple_shear_1[1][
                        0, 0]**0.5) + "MPa" + "\n")
            f.write('sigma 22 = ' +
                    str(stress_calcul.tensor_biaxial_simple_shear_1[0][1]) +
                    "+/-" + str(stress_calcul.tensor_biaxial_simple_shear_1[1][
                        1, 1]**0.5) + "MPa" + "\n")
            f.write('sigma 13 = sigma 31 = ' +
                    str(stress_calcul.tensor_biaxial_simple_shear_1[0][2]) +
                    "+/-" + str(stress_calcul.tensor_biaxial_simple_shear_1[1][
                        2, 2]**0.5) + "MPa" + "\n")
            f.write('sigma 23 = sigma 32 = ' +
                    str(stress_calcul.tensor_biaxial_simple_shear_1[0][3]) +
                    "+/-" + str(stress_calcul.tensor_biaxial_simple_shear_1[1][
                        3, 3]**0.5) + "MPa" + "\n")
            f.write('sigma 33 = 0MPa\n')

            progress["value"] = progress["value"] + 1
            progress.update()
            f.write("---------------------------------------------------- \n")
            f.write("---------------------------------------------------- \n")
            f.write("---------------------------------------------------- \n")
            f.write("---------------------------------------------------- \n")
            f.write('STRESS AT PHI\n')
            f.write("---------------------------------------------------- \n")
            f.write("FUNDAMENTAL METHOD \n")
            for i in range(len(stress_calcul.liste_phi)):
                f.write("----Phi= " + str(stress_calcul.liste_phi[i]) +
                        "(°)----\n")
                f.write("Biaxial: " + "sigma= " +
                        str(stress_calcul.sigma_phi_biaxial_simple[i]) +
                        "+/-" +
                        str(stress_calcul.error_sigma_phi_biaxial_simple[i]) +
                        "MPa" + "\n")
                f.write("Biaxial+shear: " + "sigma= " +
                        str(stress_calcul.sigma_phi_biaxial_simple_shear[i]) +
                        "+/-" + str(stress_calcul.
                                    error_sigma_phi_biaxial_simple_shear[i]) +
                        "MPa" + "\n")
                f.write("Biaxial+shear: " + "shear= " +
                        str(stress_calcul.shear_phi_biaxial_simple_shear[i]) +
                        "+/-" + str(stress_calcul.
                                    error_shear_phi_biaxial_simple_shear[i]) +
                        "MPa" + "\n")
            f.write("---------------------------------------------------- \n")
            f.write("---------------------------------------------------- \n")
            f.write("SIN2PSI METHOD\n")
            for i in range(len(stress_calcul.liste_phi)):
                f.write("----Phi= " + str(stress_calcul.liste_phi[i]) +
                        "(°)----\n")
                f.write("Linear fit: " + "sigma= " +
                        str(stress_calcul.sigma_phi_linear[i]) + "+/-" +
                        str(stress_calcul.error_sigma_phi_linear[i]) + "MPa" +
                        "\n")
                f.write("Elliptic: " + "sigma= " +
                        str(stress_calcul.sigma_phi_elliptic[i]) + "+/-" +
                        str(stress_calcul.error_sigma_phi_elliptic[i]) +
                        "MPa" + "\n")
                f.write("Elliptic: " + "shear= " +
                        str(stress_calcul.shear_phi_elliptic[i]) + "+/-" +
                        str(stress_calcul.error_shear_phi_elliptic[i]) +
                        "MPa" + "\n")

        if stress_calcul.sigma12_valid == True:
            progress["value"] = progress["value"] + 1
            progress.update()
            f.write('STRESS TENSOR' + "\n")
            f.write("---------------------------------------------------- \n")
            f.write("FUNDAMENTAL METHOD \n")
            f.write("---Biaxial stress----- \n")
            f.write('sigma 11 = ' + str(stress_calcul.tensor_biaxial[0][0]) +
                    "+/-" + str(stress_calcul.tensor_biaxial[1][0, 0]**0.5) +
                    "MPa" + "\n")
            f.write('sigma 22 = ' + str(stress_calcul.tensor_biaxial[0][2]) +
                    "+/-" + str(stress_calcul.tensor_biaxial[1][2, 2]**0.5) +
                    "MPa" + "\n")
            f.write('sigma 12 = sigma 21 = ' +
                    str(stress_calcul.tensor_biaxial[0][1]) + "+/-" +
                    str(stress_calcul.tensor_biaxial[1][1, 1]**0.5) + "MPa" +
                    "\n")
            f.write("---------------------- \n")
            f.write("---Biaxial+shear stress----- \n")
            f.write('sigma 11 = ' +
                    str(stress_calcul.tensor_biaxial_shear[0][0]) + "+/-" +
                    str(stress_calcul.tensor_biaxial_shear[1][0, 0]**0.5) +
                    "MPa" + "\n")
            f.write('sigma 22 = ' +
                    str(stress_calcul.tensor_biaxial_shear[0][2]) + "+/-" +
                    str(stress_calcul.tensor_biaxial_shear[1][2, 2]**0.5) +
                    "MPa" + "\n")
            f.write('sigma 12 = sigma 21 = ' +
                    str(stress_calcul.tensor_biaxial_shear[0][1]) + "+/-" +
                    str(stress_calcul.tensor_biaxial_shear[1][1, 1]**0.5) +
                    "MPa" + "\n")
            f.write('sigma 13 = sigma 31 = ' +
                    str(stress_calcul.tensor_biaxial_shear[0][3]) + "+/-" +
                    str(stress_calcul.tensor_biaxial_shear[1][3, 3]**0.5) +
                    "MPa" + "\n")
            f.write('sigma 23 = sigma 32 = ' +
                    str(stress_calcul.tensor_biaxial_shear[0][4]) + "+/-" +
                    str(stress_calcul.tensor_biaxial_shear[1][4, 4]**0.5) +
                    "MPa" + "\n")
            f.write('sigma 33 = 0MPa\n')
            if stress_calcul.stress_valid >= 3:
                f.write("---Triaxial stress----- \n")
                f.write('sigma 11 = ' +
                        str(stress_calcul.tensor_triaxial[0][0]) + "+/-" +
                        str(stress_calcul.tensor_triaxial[1][0, 0]**0.5) +
                        "MPa" + "\n")
                f.write('sigma 22 = ' +
                        str(stress_calcul.tensor_triaxial[0][2]) + "+/-" +
                        str(stress_calcul.tensor_triaxial[1][2, 2]**0.5) +
                        "MPa" + "\n")
                f.write('sigma 12 = sigma 21 = ' +
                        str(stress_calcul.tensor_triaxial[0][1]) + "+/-" +
                        str(stress_calcul.tensor_triaxial[1][1, 1]**0.5) +
                        "MPa" + "\n")
                f.write('sigma 13 = sigma 31 = ' +
                        str(stress_calcul.tensor_triaxial[0][3]) + "+/-" +
                        str(stress_calcul.tensor_triaxial[1][3, 3]**0.5) +
                        "MPa" + "\n")
                f.write('sigma 23 = sigma 32 = ' +
                        str(stress_calcul.tensor_triaxial[0][4]) + "+/-" +
                        str(stress_calcul.tensor_triaxial[1][4, 4]**0.5) +
                        "MPa" + "\n")
                f.write('sigma 33 = ' +
                        str(stress_calcul.tensor_triaxial[0][5]) + "+/-" +
                        str(stress_calcul.tensor_triaxial[1][5, 5]**0.5) +
                        "MPa" + "\n")
            f.write("---------------------------------------------------- \n")
            f.write("---------------------------------------------------- \n")
            f.write("SIN2PSI METHOD\n")
            f.write("---Biaxial stress----- \n")
            f.write('sigma 11 = ' + str(stress_calcul.tensor_biaxial_1[0][0]) +
                    "+/-" + str(stress_calcul.tensor_biaxial_1[1][0, 0]**0.5) +
                    "MPa" + "\n")
            f.write('sigma 22 = ' + str(stress_calcul.tensor_biaxial_1[0][2]) +
                    "+/-" + str(stress_calcul.tensor_biaxial_1[1][2, 2]**0.5) +
                    "MPa" + "\n")
            f.write('sigma 12 = sigma 21 = ' +
                    str(stress_calcul.tensor_biaxial_1[0][1]) + "+/-" +
                    str(stress_calcul.tensor_biaxial_1[1][1, 1]**0.5) + "MPa" +
                    "\n")
            f.write("---------------------- \n")
            f.write("---Biaxial+shear stress----- \n")
            f.write('sigma 11 = ' +
                    str(stress_calcul.tensor_biaxial_shear_1[0][0]) + "+/-" +
                    str(stress_calcul.tensor_biaxial_shear_1[1][0, 0]**0.5) +
                    "MPa" + "\n")
            f.write('sigma 22 = ' +
                    str(stress_calcul.tensor_biaxial_shear_1[0][2]) + "+/-" +
                    str(stress_calcul.tensor_biaxial_shear_1[1][2, 2]**0.5) +
                    "MPa" + "\n")
            f.write('sigma 12 = sigma 21 = ' +
                    str(stress_calcul.tensor_biaxial_shear_1[0][1]) + "+/-" +
                    str(stress_calcul.tensor_biaxial_shear_1[1][1, 1]**0.5) +
                    "MPa" + "\n")
            f.write('sigma 13 = sigma 31 = ' +
                    str(stress_calcul.tensor_biaxial_shear_1[0][3]) + "+/-" +
                    str(stress_calcul.tensor_biaxial_shear_1[1][3, 3]**0.5) +
                    "MPa" + "\n")
            f.write('sigma 23 = sigma 32 = ' +
                    str(stress_calcul.tensor_biaxial_shear_1[0][4]) + "+/-" +
                    str(stress_calcul.tensor_biaxial_shear_1[1][4, 4]**0.5) +
                    "MPa" + "\n")
            f.write('sigma 33 = 0MPa\n')
            if stress_calcul.stress_valid >= 3:
                f.write("---Triaxial stress----- \n")
                f.write('sigma 11 = ' +
                        str(stress_calcul.tensor_triaxial_1[0][0]) + "+/-" +
                        str(stress_calcul.tensor_triaxial_1[1][0, 0]**0.5) +
                        "MPa" + "\n")
                f.write('sigma 22 = ' +
                        str(stress_calcul.tensor_triaxial_1[0][2]) + "+/-" +
                        str(stress_calcul.tensor_triaxial_1[1][2, 2]**0.5) +
                        "MPa" + "\n")
                f.write('sigma 12 = sigma 21 = ' +
                        str(stress_calcul.tensor_triaxial_1[0][1]) + "+/-" +
                        str(stress_calcul.tensor_triaxial_1[1][1, 1]**0.5) +
                        "MPa" + "\n")
                f.write('sigma 13 = sigma 31 = ' +
                        str(stress_calcul.tensor_triaxial_1[0][3]) + "+/-" +
                        str(stress_calcul.tensor_triaxial_1[1][3, 3]**0.5) +
                        "MPa" + "\n")
                f.write('sigma 23 = sigma 32 = ' +
                        str(stress_calcul.tensor_triaxial_1[0][4]) + "+/-" +
                        str(stress_calcul.tensor_triaxial_1[1][4, 4]**0.5) +
                        "MPa" + "\n")
                f.write('sigma 33 = ' +
                        str(stress_calcul.tensor_triaxial_1[0][5]) + "+/-" +
                        str(stress_calcul.tensor_triaxial_1[1][5, 5]**0.5) +
                        "MPa" + "\n")

            progress["value"] = progress["value"] + 1
            progress.update()
            f.write("---------------------------------------------------- \n")
            f.write("---------------------------------------------------- \n")
            f.write("---------------------------------------------------- \n")
            f.write("---------------------------------------------------- \n")
            f.write('STRESS AT PHI\n')
            f.write("---------------------------------------------------- \n")
            f.write("FUNDAMENTAL METHOD \n")
            for i in range(len(stress_calcul.liste_phi)):
                f.write("----Phi= " + str(stress_calcul.liste_phi[i]) +
                        "(°)----\n")
                f.write("Biaxial: " + "sigma= " +
                        str(stress_calcul.sigma_phi_biaxial[i]) + "+/-" +
                        str(stress_calcul.error_sigma_phi_biaxial[i]) + "MPa" +
                        "\n")
                f.write("Biaxial+shear: " + "sigma= " +
                        str(stress_calcul.sigma_phi_biaxial_shear[i]) + "+/-" +
                        str(stress_calcul.error_sigma_phi_biaxial_shear[i]) +
                        "MPa" + "\n")
                f.write("Biaxial+shear: " + "shear= " +
                        str(stress_calcul.shear_phi_biaxial_shear[i]) + "+/-" +
                        str(stress_calcul.error_shear_phi_biaxial_shear[i]) +
                        "MPa" + "\n")
                if len(stress_calcul.liste_phi) >= 3:
                    f.write("Triaxial: " + "sigma= " +
                            str(stress_calcul.sigma_phi_triaxial[i]) + "+/-" +
                            str(stress_calcul.error_sigma_phi_triaxial[i]) +
                            "MPa" + "\n")
                    f.write("Triaxial: " + "shear= " +
                            str(stress_calcul.shear_phi_triaxial[i]) + "+/-" +
                            str(stress_calcul.error_shear_phi_triaxial[i]) +
                            "MPa" + "\n")
            f.write("---------------------------------------------------- \n")
            f.write("---------------------------------------------------- \n")
            f.write("SIN2PSI METHOD\n")
            for i in range(len(stress_calcul.liste_phi)):
                f.write("----Phi= " + str(stress_calcul.liste_phi[i]) +
                        "(°)----\n")
                f.write("Linear fit: " + "sigma= " +
                        str(stress_calcul.sigma_phi_linear[i]) + "+/-" +
                        str(stress_calcul.error_sigma_phi_linear[i]) + "MPa" +
                        "\n")
                f.write("Elliptic: " + "sigma= " +
                        str(stress_calcul.sigma_phi_elliptic[i]) + "+/-" +
                        str(stress_calcul.error_sigma_phi_elliptic[i]) +
                        "MPa" + "\n")
                f.write("Elliptic: " + "shear= " +
                        str(stress_calcul.shear_phi_elliptic[i]) + "+/-" +
                        str(stress_calcul.error_shear_phi_elliptic[i]) +
                        "MPa" + "\n")

        f.write("---------------------------------------------------- \n")
        f.write("---------------------------------------------------- \n")

        f.write(
            "phi(°)    psi(°)    omega(°)     gamma(°)   peak_2theta(°)    phi_gamma(°)     psi_gamma(°)\n"
        )
        for i in range(len(stress_calcul.phi_stress)):
            progress["value"] = progress["value"] + 1
            progress.update()
            for j in range(calcul_2D.gamma_number_step):
                gamma_range = round(calcul_2D.gamma_from +
                                    j * calcul_2D.gamma_stepline)
                try:
                    f.write(str("%3.4g" % stress_calcul.phi_stress[i]))
                    f.write(str("%10.4g" % stress_calcul.psi_stress[i]))
                    f.write(str("%12.4g" % calcul_2D.omega[i]))
                    f.write(str("%15.4g" % calcul_2D.gamma_i[gamma_range]))
                    f.write(
                        str("%15.4g" % calcul_2D.all_two_theta_pearson[
                            i * calcul_2D.gamma_number_step + j]))
                    f.write(
                        str("%15.4g" % stress_calcul.phi_gamma[
                            i * calcul_2D.gamma_number_step + j]))
                    f.write(
                        str("%15.4g" % stress_calcul.psi_gamma[
                            i * calcul_2D.gamma_number_step + j]))
                except TypeError:
                    pass
                f.write("\n")
        f.close()
        for widget in analyze_2D.Frame1_2.winfo_children():
            widget.destroy()
    run_program.fenetre.mainloop()
コード例 #11
0
def export_all_fit_data(main_calcul, calib_2D, main):
    f = asksaveasfile(title="Export data",
                      mode='w',
                      defaultextension=".text",
                      filetypes=[('text files', '.txt'), ('all files', '.*')])
    if f is not None and f is not '':
        for widget in main.Frame1_2.winfo_children():
            widget.destroy()
        Label(main.Frame1_2, text="Export").pack(side=LEFT)
        progress = Progressbar(main.Frame1_2,
                               orient="horizontal",
                               mode='determinate')
        progress.pack(side=LEFT)
        progress["value"] = 0
        progress["maximum"] = len(main_calcul.phi) * main_calcul.gamma_number

        for nimage in range(len(main_calcul.phi)):
            for i_graph in range(main_calcul.gamma_number):
                progress["value"] = progress["value"] + 1
                progress.update()

                i = calib_2D.nimage * main_calcul.gamma_number + i_graph
                j_start = int(main_calcul.gamma_f_index +
                              i_graph * main_calcul.gamma_step)
                j_end = int(main_calcul.gamma_f_index +
                            (i_graph + 1) * main_calcul.gamma_step)

                f.write("Phi=" + str(main_calcul.phi[nimage]) + "°\n")
                f.write("Chi=" + str(main_calcul.chi[nimage]) + "°\n")
                f.write("Omega=" + str(main_calcul.omega[nimage]) + "°\n")
                f.write("peak position=" + str(main_calcul.peaks_position[i]) +
                        "° +/- " + str(main_calcul.error_peaks_position[i]) +
                        "°\n")
                f.write("FWHM=" + str(main_calcul.FWHM[i]) + "° +/- " +
                        str(main_calcul.error_FWHM[i]) + "°\n")
                f.write("Peak intensity=" +
                        str(main_calcul.peak_intensity[i]) + " +/- " +
                        str(main_calcul.error_peak_intensity[i]) + "\n")
                f.write("a=" + str(main_calcul.a[i]) + "\n")
                f.write("r=" + str(main_calcul.r[i]) + "\n")
                f.write("gamma integrate from " +
                        str(int(main_calcul.gamma_y[j_start])) + "° to " +
                        str(int(main_calcul.gamma_y[j_end])) + "°\n")
                f.write(" two_theta(°)\t")
                f.write("instensity\t")
                f.write("background\t")
                f.write("substrat_background\t")
                f.write("   I_kalpha1\t")
                f.write("   I_kalpha2\t")
                f.write("I_Pearson_VII fit\t")
                f.write("\n")

                for j in range(len(main_calcul.data_x_limit)):
                    try:
                        f.write(str(main_calcul.data_x_limit[j]) + "\t")
                        f.write(str(main_calcul.data_y_limit[i][j]) + "\t")
                        f.write(
                            str(main_calcul.data_y_background_fit[i][j]) +
                            "\t")
                        f.write(str(main_calcul.data_y_net[i][j]) + "\t")
                        f.write(str(main_calcul.data_y_k1_fit[i][j]) + "\t")
                        f.write(str(main_calcul.data_y_k2_fit[i][j]) + "\t")
                        f.write(str(main_calcul.data_y_fit_total[i][j]) + "\t")
                        f.write("\n")
                    except (IndexError, ValueError):
                        pass
                f.write("--------------------------------------\n")
                f.write("--------------------------------------\n")
        f.close()
        for widget in main.Frame1_2.winfo_children():
            widget.destroy()
    main.root.mainloop()
コード例 #12
0
def export_calib_data(calib_2D, angles_modif, import_XRD, main):
    from residual_stress_2D.calib_XRD_2D import calib_pyFai

    f = asksaveasfile(title="Export data",
                      mode='w',
                      defaultextension=".xlf",
                      filetypes=[('X-Light format', '.xlf'),
                                 ('all files', '.*')])
    if f is not None and f is not '':
        for widget in main.Frame1_2.winfo_children():
            widget.destroy()
        Label(main.Frame1_2, text="Export").pack(side=LEFT)
        progress = Progressbar(main.Frame1_2,
                               orient="horizontal",
                               mode='determinate')
        progress.pack(side=LEFT)
        progress["value"] = 0
        progress["maximum"] = 3

        rotate = import_XRD.rotate
        flip = import_XRD.flip

        if calib_2D.angles_modif_valid == True:
            twotheta_x = angles_modif.twotheta_x
            gamma_y = angles_modif.gamma_y
            phi = angles_modif.phi[calib_2D.nimage]
            chi = angles_modif.chi[calib_2D.nimage]
            omega = angles_modif.omega[calib_2D.nimage]
            twotheta_center = angles_modif.twotheta_center[calib_2D.nimage]
        else:
            twotheta_x = calib_2D.twotheta_x
            gamma_y = calib_2D.gamma_y
            phi = calib_2D.phi[calib_2D.nimage]
            chi = calib_2D.chi[calib_2D.nimage]
            omega = calib_2D.omega[calib_2D.nimage]
            twotheta_center = calib_2D.twotheta_center[calib_2D.nimage]

        progress["value"] = progress["value"] + 1
        progress.update()

        data = read_data_2D(calib_2D.nimage, import_XRD)

        if len(data.shape) == 3:
            data = data[import_XRD.nimage_i[calib_2D.nimage]]

        if len(data) == 0:
            showinfo(title="Warning",
                     message="Can not read data of " + str(filename))
            return

        if rotate == 0:
            nrow = import_XRD.nrow[calib_2D.nimage]
            ncol = import_XRD.ncol[calib_2D.nimage]
            center_row = import_XRD.center_row[calib_2D.nimage]
            center_col = import_XRD.center_col[calib_2D.nimage]

        if rotate == 90:
            data = np.rot90(data, k=1, axes=(0, 1))
            nrow = import_XRD.ncol[calib_2D.nimage]
            ncol = import_XRD.nrow[calib_2D.nimage]
            center_row = import_XRD.center_col[calib_2D.nimage]
            center_col = import_XRD.center_row[calib_2D.nimage]

        if rotate == 180:
            data = np.rot90(data, k=2, axes=(0, 1))
            nrow = import_XRD.nrow[calib_2D.nimage]
            ncol = import_XRD.ncol[calib_2D.nimage]
            center_row = import_XRD.center_row[calib_2D.nimage]
            center_col = import_XRD.center_col[calib_2D.nimage]

        if rotate == 270:
            data = np.rot90(data, k=3, axes=(0, 1))
            nrow = import_XRD.ncol[calib_2D.nimage]
            ncol = import_XRD.nrow[calib_2D.nimage]
            center_row = import_XRD.center_col[calib_2D.nimage]
            center_col = import_XRD.center_row[calib_2D.nimage]

        if flip == 1:
            data = np.flip(data, axis=0)

        if flip == 2:
            data = np.flip(data, axis=1)

        progress["value"] = progress["value"] + 1
        progress.update()
        calib = calib_pyFai(import_XRD, data, nrow, ncol, center_row,
                            center_col, twotheta_center)

        if len(calib) > 0:
            data = calib[0]
        else:
            showinfo(title="Warning",
                     message="Can not calib file " + str(filename))
            return

        if float(calib_2D.Check_twotheta_flip.get()) == 1:
            data = np.flip(data, axis=1)

        if len(data) > 0:
            progress["value"] = progress["value"] + 1
            progress.update()
            nrow = len(gamma_y)
            ncol = len(twotheta_x)

            f.write("Phi=" + str(phi) + "\n")
            f.write("Chi=" + str(chi) + "\n")
            f.write("Omega=" + str(omega) + "\n")
            f.write("2theta=" + str(twotheta_center) + "\n")
            f.write("Wavelength=" + str(import_XRD.k_alpha[calib_2D.nimage]) +
                    "\n")
            f.write("Distance=" + str(import_XRD.distance[calib_2D.nimage]) +
                    "\n")
            f.write("------------------------------------------\n")
            f.write("NRow=" + str(nrow) + "\n")
            f.write("Center Row=" + str(center_row) + "\n")
            for i in range(nrow):
                f.write(str(gamma_y[i]) + " ")
            f.write("\n")
            f.write("NCol=" + str(ncol) + "\n")
            f.write("Center Col=" + str(center_col) + "\n")
            for i in range(ncol):
                f.write(str(twotheta_x[i]) + " ")
            f.write("\n")
            f.write("------------------------------------------\n")
            f.write("------------------------------------------\n")

            progress["value"] = progress["value"] + 1
            progress.update()

            for i in range(nrow):
                f.write(" ".join(str(e) for e in data[i]))
                f.write("\n")

            progress["value"] = progress["value"] + 1
            progress.update()
    for widget in main.Frame1_2.winfo_children():
        widget.destroy()
    f.close()
    main.root.mainloop()
コード例 #13
0
def export_all_original_data(import_XRD, main):
    location = askdirectory(title="Please choose a directory")
    if location is not None and location is not '':
        for widget in main.Frame1_2.winfo_children():
            widget.destroy()
        Label(main.Frame1_2, text="Export").pack(side=LEFT)
        progress = Progressbar(main.Frame1_2,
                               orient="horizontal",
                               mode='determinate')
        progress.pack(side=LEFT)
        progress["value"] = 0
        progress["maximum"] = len(import_XRD.nfile)

        rotate = import_XRD.rotate
        flip = import_XRD.flip

        for i in range(len(import_XRD.nfile)):
            progress["value"] = progress["value"] + 1
            progress.update()

            f_split = (import_XRD.file_link[import_XRD.nfile[i]]).split("/")
            filename = f_split[len(f_split) - 1]
            name = str(location) + '/' + str(
                filename.split('.')[0]) + '_' + str(
                    import_XRD.nimage_i[i]) + '.xlf'
            f = open(name, 'w')

            data = read_data_2D(i, import_XRD)
            if len(data.shape) == 3:
                data = data[import_XRD.nimage_i[i]]

            if len(data) == 0:
                showinfo(title="Warning",
                         message="Can not read data of " + str(filename))
                return

            if rotate == 0:
                nrow = import_XRD.nrow[i]
                ncol = import_XRD.ncol[i]
                center_row = import_XRD.center_row[i]
                center_col = import_XRD.center_col[i]
                row_tick = import_XRD.row_tick[i]
                col_tick = import_XRD.col_tick[i]

            if rotate == 90:
                data = np.rot90(data, k=1, axes=(0, 1))
                nrow = import_XRD.ncol[i]
                ncol = import_XRD.nrow[i]
                center_row = import_XRD.center_col[i]
                center_col = import_XRD.center_row[i]
                row_tick = import_XRD.col_tick[i]
                col_tick = import_XRD.row_tick[i]

            if rotate == 180:
                data = np.rot90(data, k=2, axes=(0, 1))
                nrow = import_XRD.nrow[i]
                ncol = import_XRD.ncol[i]
                center_row = import_XRD.center_row[i]
                center_col = import_XRD.center_col[i]
                row_tick = import_XRD.row_tick[i]
                col_tick = import_XRD.col_tick[i]

            if rotate == 270:
                data = np.rot90(data, k=3, axes=(0, 1))
                nrow = import_XRD.ncol[i]
                ncol = import_XRD.nrow[i]
                center_row = import_XRD.center_col[i]
                center_col = import_XRD.center_row[i]
                row_tick = import_XRD.col_tick[i]
                col_tick = import_XRD.row_tick[i]

            if flip == 1:
                data = np.flip(data, axis=0)
            if flip == 2:
                data = np.flip(data, axis=1)

            f.write("Phi=" + str(import_XRD.phi[i]) + "\n")
            f.write("Chi=" + str(import_XRD.chi[i]) + "\n")
            f.write("Omega=" + str(import_XRD.omega[i]) + "\n")
            f.write("2theta=" + str(import_XRD.twotheta_center[i]) + "\n")
            f.write("Wavelength=" + str(import_XRD.k_alpha[i]) + "\n")
            f.write("Distance=" + str(import_XRD.distance[i]) + "\n")
            f.write("------------------------------------------\n")
            f.write("NRow=" + str(nrow) + "\n")
            f.write("Center Row=" + str(center_row) + "\n")
            for j in range(nrow):
                f.write(str(row_tick[j]) + " ")
            f.write("\n")
            f.write("NCol=" + str(ncol) + "\n")
            f.write("Center Col=" + str(center_col) + "\n")
            for j in range(ncol):
                f.write(str(col_tick[j]) + " ")
            f.write("\n")
            f.write("------------------------------------------\n")
            f.write("------------------------------------------\n")

            progress["value"] = progress["value"] + 1
            progress.update()

            for i in range(nrow):
                f.write(" ".join(str(e) for e in data[i]))
                if i < nrow - 1:
                    f.write("\n")

            f.close()

    for widget in main.Frame1_2.winfo_children():
        widget.destroy()
    main.root.mainloop()
コード例 #14
0
ファイル: main_gui.py プロジェクト: orozcohsu/ntunhs_2020
class MainFrame(Frame):
    ''' This class implements main GUI of the application.

        Attributes:
            parent (Tk object): parent of this frame (Tk()).
            params_frame (ParamsFrame): frame with parameters.
            data_frame (DataFrame): frame with data and solution.
            progress_bar (Progressbar): progress bar widget.
            increment (int): progress bar increment, it is modified
                in other classes that are responsible for solving
                the problem and update progress.
            weights_status_lbl (Label): label that displays if weight
                restrictions are feasible.
            weights_status_str (StringVar): StringVar object used for
                tracking if weight restrictions are feasible.
            current_categories (list of str): list of current categories.

        Args:
            parent (Tk object): parent of this frame (Tk()).
    '''
    def __init__(self, parent, *args, **kwargs):
        Frame.__init__(self, parent, *args, **kwargs)
        self.parent = parent
        self.params_frame = None
        self.data_frame = None
        self.progress_bar = None
        self.increment = 0
        self.weights_status_lbl = None
        self.weights_status_str = StringVar()
        self.weights_status_str.trace('w', self.on_weights_status_change)
        self.current_categories = []
        self.create_widgets()

    def create_widgets(self):
        ''' Creates all widgets that belong to this frame.
        '''
        self.parent.title('pyDEA')
        self.pack(fill=BOTH, expand=1)

        self.columnconfigure(0, weight=1, pad=5)
        self.columnconfigure(1, weight=0, pad=5)
        self.rowconfigure(0, pad=3, weight=1)
        self.rowconfigure(1, pad=3)
        self.rowconfigure(2, pad=3)
        self.rowconfigure(3, pad=3)

        self.current_categories = []
        data_from_params_file = StringVar()
        str_var_for_input_output_boxes = ObserverStringVar()
        self.params_frame = ParamsFrame(self, self.current_categories,
                                        data_from_params_file,
                                        str_var_for_input_output_boxes,
                                        self.weights_status_str)
        data_frame = DataFrame(self, self.params_frame,
                               self.current_categories, data_from_params_file,
                               str_var_for_input_output_boxes)
        self.data_frame = data_frame
        data_frame.grid(row=0,
                        column=0,
                        sticky=N + S + W + E,
                        padx=15,
                        pady=15)

        self.params_frame.grid(row=0,
                               column=1,
                               sticky=W + E + S + N,
                               padx=15,
                               pady=15,
                               columnspan=2)

        lbl_progress = Label(self, text='Progress')
        lbl_progress.grid(row=1, column=0, sticky=W, padx=10, pady=5)

        self.progress_bar = Progressbar(self, mode='determinate', maximum=100)
        self.progress_bar.grid(row=2, column=0, sticky=W + E, padx=10, pady=5)

        run_btn = Button(self, text='Run', command=self.run)
        run_btn.grid(row=2, column=1, sticky=W, padx=10, pady=10)

        self.weights_status_lbl = Label(self, text='', foreground='red')
        self.weights_status_lbl.grid(row=2,
                                     column=2,
                                     padx=10,
                                     pady=5,
                                     sticky=W)

    def on_weights_status_change(self, *args):
        ''' This method is called when weight restrictions status is changed.
        '''
        self.weights_status_lbl.config(text=self.weights_status_str.get())

    def run(self):
        ''' This method is called when the user presses Run button.
            Solves the problem and displays solution.
        '''
        clean_up_pickled_files()
        params = self.params_frame.params
        run_method = RunMethodGUI(self)
        run_method.run(params)

    def construct_categories(self):
        ''' Returns current categories.

            Returns:
                (list of str): list of current categories
        '''
        return [
            category.strip() for category in self.current_categories
            if category
        ]

    def on_dmu_change(self, *args):
        ''' Updates progress bar.
        '''
        self.progress_bar.step(self.increment)
        self.progress_bar.update()
コード例 #15
0
class Application(Frame):
    def __init__(self, master=None, *args, **kwargs):
        """
        urls - text
        output_dir - dir picker
        limit - num field
        format - select
        tree - checkbox
        debug - checkbox
        """
        super().__init__(master, *args, **kwargs)
        self.root = master
        self.grid(padx=20, pady=20)
        self.rowconfigure(0, weight=1)
        self.columnconfigure(0, weight=1)

        self.url = StringVar()
        self.output_dir = StringVar(value=HOME_DIR)
        self.format = StringVar()
        self.playlist_name = StringVar()
        self.index = StringVar(value='0')
        self.limit = StringVar(value='50')
        self.use_tree = StringVar(value='1')
        self.slugify = StringVar(value='0')
        self.logs_var = StringVar(value='foo')
        self.should_stop = False

        self.download_btn: Button = None
        self.stop_btn: Button = None
        self.info_label: Label = None
        self.error_label: Label = None
        self.progress: Progressbar = None

        list_params_frame = Frame(self, width=400)
        output_dir_frame = Frame(self, width=400)
        misc_frame = Frame(self, width=400)
        download_frame = Frame(self, width=400)

        self.set_list_params_frame(list_params_frame)
        self.set_output_dir_frame(output_dir_frame)
        self.set_misc_frame(misc_frame)
        self.set_download_frame(download_frame)

        list_params_frame.grid(row=0, pady=(0, 20), sticky='ew')
        output_dir_frame.grid(row=1, pady=(0, 20), sticky='ew')
        misc_frame.grid(row=2, pady=(0, 20), sticky='ew')
        download_frame.grid(row=3, sticky='ew')

    def set_list_params_frame(self, frame: Frame):
        label = Label(
            frame,
            text='Deezer URL of playlist, artist, album or user profile',
            font='Helvetica 14 bold')
        label.grid(row=0, column=0, sticky='w')

        list_id_entry = Entry(frame, textvariable=self.url, width=50)
        list_id_entry.focus_set()
        list_id_entry.grid(row=1, column=0, sticky='ew', columnspan=5)

    def set_output_dir_frame(self, frame: Frame):
        label = Label(frame, text='Output dir', font='Helvetica 14 bold')
        label.grid(row=0, column=0, sticky='w')

        output_dir = Entry(frame, textvariable=self.output_dir, width=50)
        output_dir.grid(row=1, column=0, sticky='ew', columnspan=5)

        output_dir_btn = Button(frame,
                                text="pick directory",
                                command=self.browse_button)
        output_dir_btn.grid(row=2, column=0, sticky='ew', columnspan=5)

    def set_misc_frame(self, frame: Frame):
        def validate_int(value: str, acttyp: str):
            if acttyp == '1':  # insert
                try:
                    int(value)
                    return True
                except ValueError:
                    return False
            return True

        playlist_lbl = Label(frame, text='Playlist name')
        playlist_lbl.grid(row=0, column=0, sticky='w')

        playlist_inp = Entry(frame, textvariable=self.playlist_name)
        playlist_inp.grid(row=0, column=1, sticky='ew', columnspan=5)

        index_label = Label(frame, text='Start index')
        index_label.grid(row=1, column=0, sticky='w')

        index_entry = Entry(frame, textvariable=self.index, validate="key")
        index_entry['validatecommand'] = (index_entry.register(validate_int),
                                          '%P', '%d')
        index_entry.grid(row=1, column=1, sticky='w')

        limit_label = Label(frame, text='Load limit')
        limit_label.grid(row=2, column=0, sticky='w')

        limit_entry = Entry(frame, textvariable=self.limit, validate="key")
        limit_entry['validatecommand'] = (limit_entry.register(validate_int),
                                          '%P', '%d')
        limit_entry.grid(row=2, column=1, sticky='w')

        format_label = Label(frame, text='Audio format')
        format_label.grid(row=3, column=0, sticky='w')

        format_options = ('mp3', 'flac')
        self.format.set(format_options[0])
        format_menu = OptionMenu(frame, self.format, *format_options)
        format_menu.grid(row=3, column=1, sticky='w')

        tree_checkbox = Checkbutton(
            frame,
            text="save as tree (artist / album / song)",
            onvalue='1',
            offvalue='0',
            variable=self.use_tree)
        tree_checkbox.grid(row=4, column=0, sticky='w', columnspan=2)

        slugify_checkbox = Checkbutton(frame,
                                       text="slugify",
                                       onvalue='1',
                                       offvalue='0',
                                       variable=self.slugify)
        slugify_checkbox.grid(row=5, column=0, sticky='w', columnspan=2)

    def set_download_frame(self, frame: Frame):
        self.download_btn = Button(frame,
                                   text='Download',
                                   width=24,
                                   command=self.download_click)
        self.download_btn.grid(row=0, sticky='ew')
        self.stop_btn = Button(frame,
                               text='Stop',
                               width=24,
                               command=self.stop_work,
                               state=DISABLED)
        self.stop_btn.grid(row=0, column=1, sticky='ew')

        self.progress = Progressbar(frame,
                                    orient="horizontal",
                                    value=0,
                                    style="red.Horizontal.TProgressbar")
        self.progress.grid(row=1, sticky='ew', columnspan=2)

        self.info_label = Label(frame, font='Helvetica 14 bold')
        self.info_label.grid(row=2, sticky='ew', columnspan=2, pady=5)
        self.error_label = Label(frame, font='Helvetica 14 bold', fg='red')
        self.error_label.grid(row=3, sticky='ew', columnspan=2, pady=5)

    def browse_button(self):
        filename = filedialog.askdirectory()
        if filename:
            self.output_dir.set(filename)

    def download_click(self):
        self.download_btn.configure(state=DISABLED)
        self.stop_btn.configure(state=NORMAL)
        threading.Thread(target=self.download).start()

    def stop_work(self):
        self.should_stop = True
        self.show_error('waiting for one last song to load before stop...')
        self.stop_btn.configure(state=DISABLED)

    def show_msg(self, msg: str):
        self.info_label.config(text=msg)
        self.info_label.update()

    def show_error(self, msg: str):
        self.error_label.config(text=msg)
        self.error_label.update()

    def set_progress(self, val: int):
        self.progress['value'] = val
        self.progress.update()

    def download(self):
        try:
            self.show_error('')
            self.show_msg('loading tracks...')
            loader = Loader(
                urls=self.url.get(),
                output_dir=self.output_dir.get(),
                index=int(self.index.get()),
                limit=int(self.limit.get()),
                format=self.format.get(),
                tree=self.use_tree.get() == '1',
                playlist_name=self.playlist_name.get(),
                slugify=self.slugify.get() == '1',
            )
            self.set_progress(0)
            self.output_dir.set(loader.output_dir)
            self.update()
            loaded, skipped, failed = 0, 0, 0
            for status, track, i, prog in loader.load_gen():
                num = f'{i + 1}/{len(loader)}'
                if status == LoadStatus.STARTING:
                    self.show_msg(f"{num} - init")
                elif status == LoadStatus.SEARCHING:
                    self.show_msg(f"{num} - searching for video")
                elif status == LoadStatus.LOADING:
                    self.show_msg(f"{num} - loading video")
                elif status == LoadStatus.MOVING:
                    self.show_msg(f"{num} - moving file")
                elif status == LoadStatus.RESTORING_META:
                    self.show_msg(f"{num} - restoring audio meta data")

                elif status == LoadStatus.SKIPPED:
                    skipped += 1
                elif status == LoadStatus.FAILED:
                    failed += 1
                elif status == LoadStatus.FINISHED:
                    loaded += 1
                    logger.debug('loaded track %s', track)

                elif status == LoadStatus.ERROR:
                    self.show_error('something went horribly wrong')

                self.set_progress(int((i + prog) / len(loader) * 100))

                if self.should_stop and status in LoadStatus.finite_states():
                    break

            self.set_progress(100)
            self.show_msg(
                f"DONE. loaded: {loaded}, skipped: {skipped}, failed: {failed}"
            )
        except Exception as e:
            logger.exception(e)
            self.show_msg('')
            self.show_error(str(e))
        finally:
            self.download_btn.configure(state=NORMAL)
            self.stop_btn.configure(state=DISABLED)
            self.should_stop = False
コード例 #16
0
class Trainer(Frame):
    def __init__(self, master=None, **kw):
        Frame.__init__(self, master, **kw)
        self.background = '#303030'
        self.border_color = '#404040'
        self.args = {
            "data_dir": "",
            "prepared_data": "processed_data",
            "field": list(FIELDS.keys())[0],
            "batch_size": 4
        }
        self.textboxes = {}
        self.thread = None
        self.running = False
        self._init_ui()

    def _init_ui(self):
        ws = self.master.winfo_screenwidth()
        hs = self.master.winfo_screenheight()
        h = hs - 100
        w = int(h / 1.414) + 100
        x = (ws / 2) - (w / 2)
        y = (hs / 2) - (h / 2)
        self.master.geometry('%dx%d+%d+%d' % (w, h, x, y))
        self.master.maxsize(w, h)
        self.master.minsize(w, h)
        self.master.title("InvoiceNet - Trainer")

        self.pack(fill=BOTH, expand=True)

        self.columnconfigure(0, weight=1)
        self.rowconfigure(0, weight=0)
        self.rowconfigure(1, weight=1)
        self.rowconfigure(2, weight=0)
        self.rowconfigure(3, weight=1)

        self.configure(bg=self.background, bd=0)

        logo_frame = Frame(self,
                           bg=self.background,
                           bd=0,
                           relief=SUNKEN,
                           highlightbackground=self.border_color,
                           highlightthickness=1)
        param_frame = Frame(self,
                            bg=self.background,
                            bd=0,
                            relief=SUNKEN,
                            highlightbackground=self.border_color,
                            highlightthickness=1)
        progress_frame = Frame(self,
                               bg=self.background,
                               bd=0,
                               relief=SUNKEN,
                               highlightbackground=self.border_color,
                               highlightthickness=0)
        main_frame = Frame(self,
                           bg=self.background,
                           bd=0,
                           relief=SUNKEN,
                           highlightbackground=self.border_color,
                           highlightthickness=1)

        logo_frame.grid(row=0, column=0, sticky='news')
        param_frame.grid(row=1, column=0, sticky='news')
        progress_frame.grid(row=2,
                            column=0,
                            sticky='news',
                            padx=50,
                            pady=(0, 20))
        main_frame.grid(row=3, column=0, sticky='news')

        # Logo Frame
        logo_frame.columnconfigure(0, weight=1)
        logo_frame.columnconfigure(1, weight=0)
        logo_frame.columnconfigure(2, weight=0)
        logo_frame.columnconfigure(3, weight=1)
        logo_frame.rowconfigure(0, weight=1)

        self.logo_img = ImageTk.PhotoImage(Image.open(r'widgets/logo.png'))
        Label(logo_frame, bg=self.background,
              image=self.logo_img).grid(row=0,
                                        column=1,
                                        sticky='news',
                                        pady=10)
        Label(logo_frame,
              text="InvoiceNet",
              bg=self.background,
              fg="white",
              font=("Arial", 24, "bold")).grid(row=0,
                                               column=2,
                                               sticky='news',
                                               padx=20,
                                               pady=10)

        # Param Frame
        param_frame.columnconfigure(0, weight=1)
        param_frame.columnconfigure(1, weight=0)
        param_frame.columnconfigure(2, weight=0)
        param_frame.columnconfigure(3, weight=1)
        param_frame.rowconfigure(0, weight=1)
        param_frame.rowconfigure(1, weight=0)
        param_frame.rowconfigure(2, weight=0)
        param_frame.rowconfigure(3, weight=0)
        param_frame.rowconfigure(4, weight=1)

        data_param = Frame(param_frame,
                           bg=self.background,
                           bd=0,
                           relief=SUNKEN,
                           highlightbackground=self.border_color,
                           highlightthickness=0)
        out_param = Frame(param_frame,
                          bg=self.background,
                          bd=0,
                          relief=SUNKEN,
                          highlightbackground=self.border_color,
                          highlightthickness=0)
        field_param = Frame(param_frame,
                            bg=self.background,
                            bd=0,
                            relief=SUNKEN,
                            highlightbackground=self.border_color,
                            highlightthickness=0)
        batch_param = Frame(param_frame,
                            bg=self.background,
                            bd=0,
                            relief=SUNKEN,
                            highlightbackground=self.border_color,
                            highlightthickness=0)

        data_param.grid(row=1, column=1, pady=(0, 20), padx=20)
        out_param.grid(row=2, column=1, pady=20, padx=20)
        field_param.grid(row=1, column=2, pady=(0, 20), padx=20)
        batch_param.grid(row=2, column=2, pady=20, padx=20)

        df = Frame(data_param,
                   bg=self.background,
                   bd=0,
                   relief=SUNKEN,
                   highlightbackground=self.border_color,
                   highlightthickness=0)
        df.pack(side=TOP, fill=BOTH)

        Label(df,
              text="Data Folder:",
              bg=self.background,
              fg="white",
              font=("Arial", 8, "bold"),
              anchor='w').pack(side=LEFT, fill=BOTH)
        HoverButton(df,
                    image_path=r'widgets/open_dir_small.png',
                    command=lambda: self._open_dir("data_dir"),
                    width=18,
                    height=18,
                    bg=self.background,
                    bd=0,
                    highlightthickness=0,
                    activebackground='#558de8').pack(side=RIGHT)

        self.textboxes["data_dir"] = Text(data_param, height=1, width=20)
        self.textboxes["data_dir"].insert('1.0', self.args["data_dir"])
        self.textboxes["data_dir"].pack(side=BOTTOM)

        of = Frame(out_param,
                   bg=self.background,
                   bd=0,
                   relief=SUNKEN,
                   highlightbackground=self.border_color,
                   highlightthickness=0)
        of.pack(side=TOP, fill=BOTH)

        Label(of,
              text="Processed Data Folder:",
              bg=self.background,
              anchor='w',
              fg="white",
              font=("Arial", 8, "bold")).pack(side=LEFT, fill=BOTH)
        HoverButton(of,
                    image_path=r'widgets/open_dir_small.png',
                    command=lambda: self._open_dir("prepared_data"),
                    width=18,
                    height=18,
                    bg=self.background,
                    bd=0,
                    highlightthickness=0,
                    activebackground='#558de8').pack(side=RIGHT)

        self.textboxes["prepared_data"] = Text(out_param, height=1, width=20)
        self.textboxes["prepared_data"].insert('1.0',
                                               self.args["prepared_data"])
        self.textboxes["prepared_data"].pack(side=BOTTOM)

        Label(field_param,
              text="Field:",
              bg=self.background,
              anchor='w',
              fg="white",
              font=("Arial", 8, "bold")).pack(side=TOP, fill=BOTH)
        self.field_text = StringVar(field_param)
        self.field_text.set(list(FIELDS.keys())[0])

        keys = list(FIELDS.keys())
        field_list = OptionMenu(field_param, self.field_text, *keys)
        field_list.configure(highlightthickness=0, width=20, bg='#ffffff')
        field_list.pack(side=BOTTOM)

        for key in keys:
            field_list['menu'].entryconfigure(key, state="normal")

        Label(batch_param,
              text="Batch Size:",
              bg=self.background,
              anchor='w',
              fg="white",
              font=("Arial", 8, "bold")).pack(side=TOP, fill=BOTH)
        self.batch_text = StringVar(batch_param)
        self.batch_text.set("4")
        batch_list = OptionMenu(batch_param, self.batch_text,
                                *[str(2**i) for i in range(8)])
        batch_list.configure(highlightthickness=0, width=20, bg='#ffffff')
        batch_list.pack(side=BOTTOM)

        HoverButton(param_frame,
                    image_path=r'widgets/prepare.png',
                    command=self._prepare_data,
                    text='Prepare Data',
                    compound='center',
                    font=("Arial", 10, "bold"),
                    bg=self.background,
                    bd=0,
                    highlightthickness=0,
                    activebackground=self.background).grid(row=3,
                                                           column=1,
                                                           columnspan=2,
                                                           padx=20,
                                                           pady=(20, 0),
                                                           sticky='news')

        # Progress Frame
        self.progress_label = Label(progress_frame,
                                    text="Preparing data:",
                                    bg=self.background,
                                    anchor='w',
                                    fg="white",
                                    font=("Arial", 8, "bold"),
                                    bd=0,
                                    highlightthickness=0)
        self.progress_label.pack(side=TOP, expand=True, fill=X, pady=(10, 5))
        self.progressbar = Progressbar(progress_frame,
                                       orient=HORIZONTAL,
                                       length=100,
                                       mode='determinate')
        self.progressbar.pack(side=BOTTOM, expand=True, fill=X)

        # Main Frame
        main_frame.columnconfigure(0, weight=1)
        main_frame.rowconfigure(0, weight=1)
        main_frame.rowconfigure(1, weight=1)

        button_frame = Frame(main_frame,
                             bg=self.background,
                             bd=0,
                             relief=SUNKEN,
                             highlightbackground=self.border_color,
                             highlightthickness=0)
        button_frame.grid(row=0, column=0, sticky='news')

        button_frame.rowconfigure(0, weight=1)
        button_frame.columnconfigure(0, weight=1)
        button_frame.columnconfigure(1, weight=0)
        button_frame.columnconfigure(2, weight=1)

        self.start_button = HoverButton(button_frame,
                                        image_path=r'widgets/begin.png',
                                        command=self._start,
                                        text='Start',
                                        compound='center',
                                        font=("Arial", 10, "bold"),
                                        bg=self.background,
                                        bd=0,
                                        highlightthickness=0,
                                        activebackground=self.background)
        self.stop_button = HoverButton(button_frame,
                                       image_path=r'widgets/stop.png',
                                       command=self._stop,
                                       text='Stop',
                                       compound='center',
                                       font=("Arial", 10, "bold"),
                                       bg=self.background,
                                       bd=0,
                                       highlightthickness=0,
                                       activebackground=self.background)

        self.start_button.grid(row=0, column=1)
        self.stop_button.grid(row=0, column=1)
        self.stop_button.grid_forget()

        self.logger = Logger(main_frame,
                             height=18,
                             bg=self.background,
                             bd=0,
                             relief=SUNKEN)
        self.logger.grid(row=1, column=0, sticky='news')

    def _train(self):
        train_data = InvoiceData.create_dataset(
            field=self.args["field"],
            data_dir=os.path.join(self.args["prepared_data"], 'train/'),
            batch_size=self.args["batch_size"])
        val_data = InvoiceData.create_dataset(
            field=self.args["field"],
            data_dir=os.path.join(self.args["prepared_data"], 'val/'),
            batch_size=self.args["batch_size"])

        restore = None
        if os.path.exists(
                os.path.join('./models/invoicenet/', self.args["field"])):
            restore = messagebox.askyesno(
                title="Restore",
                message=
                "A checkpoint was found! Do you want to restore checkpoint for training?"
            )

        restore = True if restore else False

        model = AttendCopyParse(field=self.args["field"], restore=restore)

        print_interval = 20
        early_stop_steps = 0
        best = float("inf")

        train_iter = iter(train_data)
        val_iter = iter(val_data)

        self.logger.log("Initializing training!")
        start = time.time()
        step = 0
        while True:
            train_loss = model.train_step(next(train_iter))
            if not np.isfinite(train_loss):
                raise ValueError("NaN loss")

            if step % print_interval == 0:
                took = time.time() - start
                val_loss = model.val_step(next(val_iter))
                self.logger.log(
                    "[step: %d | %.2f steps/s]: train loss: %.4f val loss: %.4f"
                    % (step, (step + 1) / took, train_loss, val_loss))
                if not np.isfinite(val_loss):
                    self.logger.log("ERROR: NaN loss")
                    self.thread.stop()
                if val_loss < best:
                    early_stop_steps = 0
                    best = val_loss
                    model.save("best")
                else:
                    early_stop_steps += print_interval
                    if early_stop_steps >= 500:
                        self.logger.log(
                            "Validation loss has not improved for 500 steps")
                        self.thread.stop()

            step += 1

            if self.thread.stopped():
                self.logger.log("Training terminated!")
                break

        self.running = False
        self.stop_button.grid_forget()
        self.start_button.grid(row=0, column=1)

    def _get_inputs(self):
        self.args["field"] = self.field_text.get()
        self.args["batch_size"] = int(self.batch_text.get())
        self.args["data_dir"] = self.textboxes["data_dir"].get("1.0", 'end-1c')
        self.args["prepared_data"] = self.textboxes["prepared_data"].get(
            "1.0", 'end-1c')
        if not self.args["prepared_data"].endswith('/'):
            self.args["prepared_data"] += '/'
        if self.args["data_dir"] == '':
            return
        if not self.args["data_dir"].endswith('/'):
            self.args["data_dir"] += '/'

    def _start(self):
        self._get_inputs()

        if not os.path.exists(self.args["prepared_data"]):
            messagebox.showerror("Error",
                                 "Prepared data folder does not exist!")
            return

        files = glob.glob(self.args["prepared_data"] + "**/*.json",
                          recursive=True)
        if not files:
            messagebox.showerror(
                "Error",
                "Could not find processed data in \"{}\". Did you prepare training data?"
                .format(self.args["prepared_data"]))
            return
        if not self.running:
            self.running = True
            self.thread = StoppableThread(target=self._train)
            self.thread.daemon = True
            self.thread.start()
            self.start_button.grid_forget()
            self.stop_button.grid(row=0, column=1)

    def _stop(self):
        if self.running:
            self.thread.stop()
            self.running = False
            self.logger.log("Stopping training...")

    def _open_dir(self, key):
        dir_name = filedialog.askdirectory(
            initialdir='.', title="Select Directory Containing Invoices")
        if not dir_name:
            return
        self.args[key] = dir_name
        self.textboxes[key].delete('1.0', END)
        self.textboxes[key].insert('1.0', self.args[key])

    def _prepare_data(self):
        self._get_inputs()

        if self.args["data_dir"] == '':
            messagebox.showerror("Error", "Data folder does not exist!")
            return

        if not os.path.exists(self.args["data_dir"]):
            messagebox.showerror("Error", "Data folder does not exist!")
            return

        self.progressbar["value"] = 0
        self.progress_label.configure(text="Preparing Data:")

        os.makedirs(os.path.join(self.args["prepared_data"], 'train'),
                    exist_ok=True)
        os.makedirs(os.path.join(self.args["prepared_data"], 'val'),
                    exist_ok=True)

        filenames = [
            os.path.abspath(f)
            for f in glob.glob(self.args["data_dir"] + "**/*.pdf",
                               recursive=True)
        ]
        random.shuffle(filenames)

        idx = int(len(filenames) * 0.2)
        train_files = filenames[idx:]
        val_files = filenames[:idx]

        self.logger.log("Total: {}".format(len(filenames)))
        self.logger.log("Training: {}".format(len(train_files)))
        self.logger.log("Validation: {}".format(len(val_files)))

        total_samples = len(filenames)
        sample_idx = 0
        for phase, filenames in [('train', train_files), ('val', val_files)]:
            self.logger.log("Preparing {} data...".format(phase))
            for filename in tqdm(filenames):
                # try:
                page = pdf2image.convert_from_path(filename)[0]
                page.save(
                    os.path.join(self.args["prepared_data"], phase,
                                 os.path.basename(filename)[:-3] + 'png'))

                height = page.size[1]
                width = page.size[0]

                ngrams = util.create_ngrams(page)
                for ngram in ngrams:
                    if "amount" in ngram["parses"]:
                        ngram["parses"]["amount"] = util.normalize(
                            ngram["parses"]["amount"], key="amount")
                    if "date" in ngram["parses"]:
                        ngram["parses"]["date"] = util.normalize(
                            ngram["parses"]["date"], key="date")

                with open(filename[:-3] + 'json', 'r') as fp:
                    labels = simplejson.loads(fp.read())

                fields = {}
                for field in FIELDS:
                    if field in labels:
                        if FIELDS[field] == FIELD_TYPES["amount"]:
                            fields[field] = util.normalize(labels[field],
                                                           key="amount")
                        elif FIELDS[field] == FIELD_TYPES["date"]:
                            fields[field] = util.normalize(labels[field],
                                                           key="date")
                        else:
                            fields[field] = labels[field]
                    else:
                        fields[field] = ''

                data = {
                    "fields":
                    fields,
                    "nGrams":
                    ngrams,
                    "height":
                    height,
                    "width":
                    width,
                    "filename":
                    os.path.abspath(
                        os.path.join(self.args["prepared_data"], phase,
                                     os.path.basename(filename)[:-3] + 'png'))
                }

                with open(
                        os.path.join(self.args["prepared_data"], phase,
                                     os.path.basename(filename)[:-3] + 'json'),
                        'w') as fp:
                    fp.write(simplejson.dumps(data, indent=2))

                # except Exception as exp:
                #     self.logger.log("Skipping {} : {}".format(filename, exp))

                sample_idx += 1
                self.progress_label.configure(
                    text="Preparing data [{}/{}]:".format(
                        sample_idx, total_samples))
                self.progressbar["value"] = (sample_idx / total_samples) * 100
                self.progressbar.update()

        self.progress_label.configure(text="Completed!")
        self.progressbar["value"] = 100
        self.progressbar.update()
        self.logger.log("Prepared data stored in '{}'".format(
            self.args["prepared_data"]))
class App(object):
    def __init__(self, object):
        self.path = StringVar()
        self.progress = StringVar()
        self.frame1 = Frame(object)
        self.frame1.pack()

        self.frame2 = Frame(object)
        self.frame2.pack()

        self.frame3 = Frame(object)
        self.frame3.pack()

        self.label_path = Label(self.frame1, text="目标路径:")
        self.label_path.pack(padx=2, pady=2, side=LEFT)

        self.entry_path = Label(self.frame1, width=34, relief=GROOVE, textvariable=self.path)
        self.entry_path.pack(padx=2, pady=2, side=LEFT)

        self.btn_select = Button(self.frame1, text="路径选择", height=1, command=self.select)
        self.btn_select.pack(padx=2, pady=2, side=LEFT)

        self.label_url = Label(self.frame2, text="输入链接:")
        self.label_url.pack(padx=2, pady=2, side=LEFT)

        self.txt_url = Entry(self.frame2, width=34)
        self.txt_url.pack(padx=2, pady=2, side=LEFT)
        
        self.btn_download = Button(self.frame2, text="立即下载", command=self.download)
        self.btn_download.pack(padx=2, pady=2, side=LEFT)

        self.label_progress = Label(self.frame3, text="当前进度:")
        self.label_progress.pack(padx=2, pady=2, side=LEFT)

        self.bar = Progressbar(self.frame3, length=242)
        self.bar.pack(padx=2, pady=2, side=LEFT, fill=X)
        self.bar['value'] = 0

        self.label = Label(self.frame3, textvariable=self.progress, width=8)
        self.label.pack(padx=2, pady=2, side=LEFT)

    # 设置进度条
    def set_progress(self, value):
        self.bar['value'] = value
        self.bar.update()

    # 显示路径
    def set_label_path(self, strs):
        self.path.set(strs)

    # 当前下载进度 ,形式为 xx/x, 如10/20
    def set_progress_text(self, strs):
        self.progress.set(strs)

    # 选择文件路径
    def select(self):
        path_ = filedialog.askdirectory()
        self.set_label_path(path_)

    # 开始下载
    def download(self):
        self.set_progress(0)
        url = self.txt_url.get()
        if url == '':
            messagebox.showinfo("提醒", "链接不能为空!")
        elif self.path.get() == '':
            messagebox.showinfo("提醒", "路径不能为空!")
        else:
            html = self.get_html_page(url)
            items = self.parse_page(html)
            self.save_picture(items)
            messagebox.showinfo("Title", "下载完成!")

    def get_html_page(self, url):
        headers = {
            'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36'
        }
        response = requests.get(url, headers=headers)
        if response.status_code == 200:
            return response.text
        else:
            return None

    def parse_page(self, html):
        pattern = re.compile('<img [^>]*data-src="([^>]+?)wx_fmt=(.+?)"[^>]*?>', re.S)
        # pattern = re.compile('<img.*?>', re.S)
        items = re.findall(pattern, str(html))
        for item in items:
            if item[1] == "other":
                items.remove(item)
        return items

    def save_picture(self, items):
        num = 0
        length = len(items)
        for item in items:
            pic = requests.get(item[0])
            # 以当前时间为前缀
            currentTime = strftime("%Y%m%d%H%M%S", localtime())
            with open(self.path.get() + '/' + currentTime + str(num) + '.' + item[1], 'wb') as file:
                file.write(pic.content)
            self.set_progress((num + 1) / length *100)
            pro = str(num + 1) + '/'+str(length)
            self.set_progress_text(pro)
            num = num + 1
コード例 #18
0
def export_original_data(nfile, nimage, nimage_i, import_XRD, main):
    f = asksaveasfile(title="Export data",
                      mode='w',
                      defaultextension=".xlf",
                      filetypes=[('X-Light format', '.xlf'),
                                 ('all files', '.*')])
    if f is not None and f is not '':
        for widget in main.Frame1_2.winfo_children():
            widget.destroy()
        Label(main.Frame1_2, text="Export").pack(side=LEFT)
        progress = Progressbar(main.Frame1_2,
                               orient="horizontal",
                               mode='determinate')
        progress.pack(side=LEFT)
        progress["value"] = 0
        progress["maximum"] = 3

        f_split = (import_XRD.file_link[nfile]).split("/")
        filename = f_split[len(f_split) - 1]
        rotate = import_XRD.rotate
        flip = import_XRD.flip

        progress["value"] = progress["value"] + 1
        progress.update()

        data = read_data_2D(nimage, import_XRD)
        if len(data.shape) == 3:
            data = data[nimage_i]

        if len(data) == 0:
            showinfo(title="Warning",
                     message="Can not read data of " + str(filename))
            return

        progress["value"] = progress["value"] + 1
        progress.update()

        if rotate == 0:
            nrow = import_XRD.nrow[nimage]
            ncol = import_XRD.ncol[nimage]
            center_row = import_XRD.center_row[nimage]
            center_col = import_XRD.center_col[nimage]
            row_tick = import_XRD.row_tick[nimage]
            col_tick = import_XRD.col_tick[nimage]

        if rotate == 90:
            data = np.rot90(data, k=1, axes=(0, 1))
            nrow = import_XRD.ncol[nimage]
            ncol = import_XRD.nrow[nimage]
            center_row = import_XRD.center_col[nimage]
            center_col = import_XRD.center_row[nimage]
            row_tick = import_XRD.col_tick[nimage]
            col_tick = import_XRD.row_tick[nimage]

        if rotate == 180:
            data = np.rot90(data, k=2, axes=(0, 1))
            nrow = import_XRD.nrow[nimage]
            ncol = import_XRD.ncol[nimage]
            center_row = import_XRD.center_row[nimage]
            center_col = import_XRD.center_col[nimage]
            row_tick = import_XRD.row_tick[nimage]
            col_tick = import_XRD.col_tick[nimage]

        if rotate == 270:
            data = np.rot90(data, k=3, axes=(0, 1))
            nrow = import_XRD.ncol[nimage]
            ncol = import_XRD.nrow[nimage]
            center_row = import_XRD.center_col[nimage]
            center_col = import_XRD.center_row[nimage]
            row_tick = import_XRD.col_tick[nimage]
            col_tick = import_XRD.row_tick[nimage]

        if flip == 1:
            data = np.flip(data, axis=0)
        if flip == 2:
            data = np.flip(data, axis=1)

        f.write("Phi=" + str(import_XRD.phi[nimage]) + "\n")
        f.write("Chi=" + str(import_XRD.chi[nimage]) + "\n")
        f.write("Omega=" + str(import_XRD.omega[nimage]) + "\n")
        f.write("2theta=" + str(import_XRD.twotheta_center[nimage]) + "\n")
        f.write("Wavelength=" + str(import_XRD.k_alpha[nimage]) + "\n")
        f.write("Distance=" + str(import_XRD.distance[nimage]) + "\n")
        f.write("------------------------------------------\n")
        f.write("NRow=" + str(nrow) + "\n")
        f.write("Center Row=" + str(center_row) + "\n")
        for i in range(nrow):
            f.write(str(row_tick[i]) + " ")
        f.write("\n")
        f.write("NCol=" + str(ncol) + "\n")
        f.write("Center Col=" + str(center_col) + "\n")
        for i in range(ncol):
            f.write(str(col_tick[i]) + " ")
        f.write("\n")
        f.write("------------------------------------------\n")
        f.write("------------------------------------------\n")

        progress["value"] = progress["value"] + 1
        progress.update()

        for i in range(nrow):
            f.write(" ".join(str(e) for e in data[i]))
            if i < nrow - 1:
                f.write("\n")

        progress["value"] = progress["value"] + 1
        progress.update()

    f.close()
    for widget in main.Frame1_2.winfo_children():
        widget.destroy()
    main.root.mainloop()
コード例 #19
0
ファイル: export_data_1D.py プロジェクト: sangpham171/X-Light
def export_all_fit_data(main_calcul, main):
    f = asksaveasfile(title="Export data",
                      mode='w',
                      defaultextension=".txt",
                      filetypes=[('text files', '.txt'), ('all files', '.*')])
    if f is not None and f is not '':
        for widget in main.Frame1_2.winfo_children():
            widget.destroy()
        Label(main.Frame1_2, text="Export").pack(side=LEFT)
        progress = Progressbar(main.Frame1_2,
                               orient="horizontal",
                               mode='determinate')
        progress.pack(side=LEFT)
        progress["value"] = 0
        progress["maximum"] = len(main_calcul.phi)
        for i in range(len(main_calcul.peaks_position)):
            progress["value"] = progress["value"] + 1
            progress.update()

            f.write("Range " + str(i + 1) + "\n")
            f.write("Phi=" + str(float(main_calcul.phi[i])) + "\n")
            f.write("Psi=" + str(float(main_calcul.chi[i])) + "\n")
            f.write("Omega=" + str(float(main_calcul.omega[i])) + "\n")
            f.write("a=" + str(main_calcul.a[i]) + "\n")
            f.write("r=" + str(main_calcul.r[i]) + "\n")
            f.write("pic 2 theta: " + str(main_calcul.peaks_position[i]) +
                    "\n")
            f.write("\n")
            f.write(" twotheta\t")
            f.write("  original\t")
            f.write("background\t")
            f.write("substrat_background\t")
            f.write("   kalpha1\t")
            f.write("   kalpha2\t")
            f.write("fitting_pearson_vii\t")
            f.write("\n")

            for j in range(len(main_calcul.data_x_limit[i])):
                try:
                    f.write(
                        str("%10.4g" % main_calcul.data_x_limit[i][j]) + "\t")
                    f.write(
                        str("%10.4g" % main_calcul.data_y_limit[i][j]) + "\t")
                    f.write(
                        str("%10.4g" %
                            main_calcul.data_y_background_fit[i][j]) + "\t")
                    f.write(
                        str("%19.4g" % main_calcul.data_y_net[i][j]) + "\t")
                    f.write(
                        str("%10.4g" % main_calcul.data_y_k1_fit[i][j]) + "\t")
                    f.write(
                        str("%10.4g" % main_calcul.data_y_k2_fit[i][j]) + "\t")
                    f.write(
                        str("%19.4g" % main_calcul.data_y_fit_total[i][j]) +
                        "\t")
                    f.write("\n")
                except (IndexError, ValueError):
                    pass
            f.write(
                "--------------------------------------------------------------\n"
            )
            f.write("\n")
        f.close()
        for widget in main.Frame1_2.winfo_children():
            widget.destroy()
    main.root.mainloop()
コード例 #20
0
def export_all_calib_data(calib_2D, angles_modif, import_XRD, main):
    from residual_stress_2D.calib_XRD_2D import calib_pyFai

    location = askdirectory(title="Please choose a directory")
    if location is not None and location is not '':
        for widget in main.Frame1_2.winfo_children():
            widget.destroy()
        Label(main.Frame1_2, text="Export").pack(side=LEFT)
        progress = Progressbar(main.Frame1_2,
                               orient="horizontal",
                               mode='determinate')
        progress.pack(side=LEFT)
        progress["value"] = 0
        progress["maximum"] = len(import_XRD.nfile)

        rotate = import_XRD.rotate
        flip = import_XRD.flip

        for i in range(len(import_XRD.nfile)):
            progress["value"] = progress["value"] + 1
            progress.update()

            f_split = (import_XRD.file_link[import_XRD.nfile[i]]).split("/")
            filename = f_split[len(f_split) - 1]
            name = str(location) + '/calib_' + str(
                filename.split('.')[0]) + '_' + str(
                    import_XRD.nimage_i[i]) + '.xlf'
            f = open(name, 'w')

            if calib_2D.angles_modif_valid == True:
                twotheta_x = angles_modif.twotheta_x
                gamma_y = angles_modif.gamma_y
                phi = angles_modif.phi[i]
                chi = angles_modif.chi[i]
                omega = angles_modif.omega[i]
                twotheta_center = angles_modif.twotheta_center[i]
            else:
                twotheta_x = calib_2D.twotheta_x
                gamma_y = calib_2D.gamma_y
                phi = calib_2D.phi[i]
                chi = calib_2D.chi[i]
                omega = calib_2D.omega[i]
                twotheta_center = calib_2D.twotheta_center[i]

            data = read_data_2D(i, import_XRD)

            if len(data.shape) == 3:
                data = data[import_XRD.nimage_i[i]]

            if len(data) == 0:
                showinfo(title="Warning",
                         message="Can not read data of " + str(filename))
                return

            if rotate == 0:
                nrow = import_XRD.nrow[i]
                ncol = import_XRD.ncol[i]
                center_row = import_XRD.center_row[i]
                center_col = import_XRD.center_col[i]

            if rotate == 90:
                data = np.rot90(data, k=1, axes=(0, 1))
                nrow = import_XRD.ncol[i]
                ncol = import_XRD.nrow[i]
                center_row = import_XRD.center_col[i]
                center_col = import_XRD.center_row[i]

            if rotate == 180:
                data = np.rot90(data, k=2, axes=(0, 1))
                nrow = import_XRD.nrow[i]
                ncol = import_XRD.ncol[i]
                center_row = import_XRD.center_row[i]
                center_col = import_XRD.center_col[i]

            if rotate == 270:
                data = np.rot90(data, k=3, axes=(0, 1))
                nrow = import_XRD.ncol[i]
                ncol = import_XRD.nrow[i]
                center_row = import_XRD.center_col[i]
                center_col = import_XRD.center_row[i]

            if flip == 1:
                data = np.flip(data, axis=0)

            if flip == 2:
                data = np.flip(data, axis=1)

            calib = calib_pyFai(import_XRD, data, nrow, ncol, center_row,
                                center_col, twotheta_center)
            if len(calib) > 0:
                data = calib[0]
            else:
                showinfo(title="Warning",
                         message="Can not calib file " + str(filename))
                return

            if float(calib_2D.Check_twotheta_flip.get()) == 1:
                data = np.flip(data, axis=1)

            if len(data) > 0:
                progress["value"] = progress["value"] + 1
                progress.update()
                data = calib[0]
                nrow = len(gamma_y)
                ncol = len(twotheta_x)

                f.write("Phi=" + str(phi) + "\n")
                f.write("Chi=" + str(chi) + "\n")
                f.write("Omega=" + str(omega) + "\n")
                f.write("2theta=" + str(twotheta_center) + "\n")
                f.write("Wavelength=" + str(import_XRD.k_alpha[i]) + "\n")
                f.write("Distance=" + str(import_XRD.distance[i]) + "\n")
                f.write("------------------------------------------\n")
                f.write("NRow=" + str(nrow) + "\n")
                f.write("Center Row=" + str(center_row) + "\n")
                for j in range(nrow):
                    f.write(str(gamma_y[j]) + " ")
                f.write("\n")
                f.write("NCol=" + str(ncol) + "\n")
                f.write("Center Col=" + str(center_col) + "\n")
                for j in range(ncol):
                    f.write(str(twotheta_x[j]) + " ")
                f.write("\n")
                f.write("------------------------------------------\n")
                f.write("------------------------------------------\n")

                progress["value"] = progress["value"] + 1
                progress.update()

                for i in range(nrow):
                    f.write(" ".join(str(e) for e in data[i]))
                    f.write("\n")
            f.close()

    for widget in main.Frame1_2.winfo_children():
        widget.destroy()
    main.root.mainloop()
コード例 #21
0
def export_all_fitting_graphs(calcul_1D, analyze_1D, run_program):
    location = askdirectory(title="Please choose a directory")
    if location is not None and location is not '':
        for widget in analyze_1D.Frame1_2.winfo_children():
            widget.destroy()
        Label(analyze_1D.Frame1_2, text="Export").pack(side=LEFT)
        progress = Progressbar(analyze_1D.Frame1_2,
                               orient="horizontal",
                               mode='determinate')
        progress.pack(side=LEFT)
        progress["value"] = 0
        progress["maximum"] = len(calcul_1D.phi)
        for i in range(len(calcul_1D.phi)):
            progress["value"] = progress["value"] + 1
            progress.update()
            try:
                x = [
                    calcul_1D.two_theta_pearson[i],
                    calcul_1D.two_theta_pearson[i]
                ]
                y = [
                    min(calcul_1D.matrix_real_intensity[i]),
                    max(calcul_1D.matrix_intensity_limit[i])
                ]

                fig = plt.figure(figsize=(10, 10), dpi=100)
                plt.plot(calcul_1D.matrix_two_theta_limit[i],
                         calcul_1D.matrix_intensity_limit[i],
                         label='original')
                plt.plot(calcul_1D.matrix_two_theta_limit[i],
                         calcul_1D.matrix_background_intensity[i],
                         label='background')
                plt.plot(calcul_1D.matrix_two_theta_limit[i],
                         calcul_1D.matrix_real_intensity[i],
                         label='substrat background')
                plt.plot(calcul_1D.matrix_two_theta_limit[i],
                         calcul_1D.matrix_F1_peak1[i],
                         label='k alpha 1')
                plt.plot(calcul_1D.matrix_two_theta_limit[i],
                         calcul_1D.matrix_F2_peak1[i],
                         label='k alpha 2')
                if len(calcul_1D.peaks) >= 2:
                    plt.plot(calcul_1D.matrix_two_theta_limit[i],
                             calcul_1D.matrix_F1_peak2[i])
                    plt.plot(calcul_1D.matrix_two_theta_limit[i],
                             calcul_1D.matrix_F2_peak2[i])
                if len(calcul_1D.peaks) == 3:
                    plt.plot(calcul_1D.matrix_two_theta_limit[i],
                             calcul_1D.matrix_F1_peak3[i])
                    plt.plot(calcul_1D.matrix_two_theta_limit[i],
                             calcul_1D.matrix_F2_peak3[i])
                plt.plot(calcul_1D.matrix_two_theta_limit[i],
                         calcul_1D.matrix_F_pearson[i],
                         label='fitting pearson vii')
                plt.plot(x,
                         y,
                         label=r"$2\theta_{0}$"
                         "=" + str(calcul_1D.two_theta_pearson[i]) + "")
                plt.xlabel(r"$2\theta$")
                plt.ylabel("Intensity")
                plt.title("phi=" + str(float(calcul_1D.phi[i])) + "; psi=" +
                          str(float(calcul_1D.psi[i])) + "")
                plt.legend(loc='upper left',
                           bbox_to_anchor=(-0.1, -0.2, 1.2, 0),
                           ncol=3,
                           mode="expand",
                           borderaxespad=0.,
                           fontsize='x-small')
                plt.subplots_adjust(bottom=0.3)
            except (IndexError, ValueError):
                plt.close(fig)
            else:
                plt.savefig(str(location) + "/fitting_phi=" +
                            str(float(calcul_1D.phi[i])) + "_psi=" +
                            str(float(calcul_1D.psi[i])) + ".png",
                            bbox_inches="tight")
                plt.close(fig)
        for widget in analyze_1D.Frame1_2.winfo_children():
            widget.destroy()
    run_program.fenetre.mainloop()
コード例 #22
0
def export_all_stress_data(calib_2D, main_calcul, stress_calcul, main):
    f = asksaveasfile(title="Export data",
                      mode='w',
                      defaultextension=".text",
                      filetypes=[('text files', '.txt'), ('all files', '.*')])
    if f is not None and f is not '':
        for widget in main.Frame1_2.winfo_children():
            widget.destroy()
        Label(main.Frame1_2, text="Export").pack(side=LEFT)
        progress = Progressbar(main.Frame1_2,
                               orient="horizontal",
                               mode='determinate')
        progress.pack(side=LEFT)
        progress["value"] = 0
        progress["maximum"] = len(main_calcul.phi) + 2

        if stress_calcul.stress_valid >= 1:
            f.write("SIN2PSI METHOD\n")
            for i in range(len(stress_calcul.liste_phi)):
                f.write("Phi= " + str(stress_calcul.liste_phi[i]) + "°")
                f.write("Linear fit: " + "sigma= " +
                        str(stress_calcul.sigma_phi_linear[i]) + "+/-" +
                        str(stress_calcul.error_sigma_phi_linear[i]) + "MPa" +
                        "\n")
                f.write("Elliptic fit: " + "sigma= " +
                        str(stress_calcul.sigma_phi_elliptic[i]) + "+/-" +
                        str(stress_calcul.error_sigma_phi_elliptic[i]) +
                        "MPa" + "\n")
                f.write("Elliptic fit: " + "shear= " +
                        str(stress_calcul.shear_phi_elliptic[i]) + "+/-" +
                        str(stress_calcul.error_shear_phi_elliptic[i]) +
                        "MPa" + "\n")
                f.write("-------------------\n")
        f.write("---------------------------------------------------- \n")
        f.write("---------------------------------------------------- \n")

        progress["value"] = progress["value"] + 1
        progress.update()
        f.write("FUNDAMENTAL METHOD \n")
        if len(stress_calcul.liste_phi
               ) >= 1 and stress_calcul.length_strain == 3:
            f.write("---Biaxial stress----- \n")
            f.write('sigma 11 = ' + str(stress_calcul.tensor_biaxial[0][0]) +
                    "+/-" + str(stress_calcul.tensor_biaxial[1][0, 0]**0.5) +
                    "MPa" + "\n")
            f.write('sigma 22 = ' + str(stress_calcul.tensor_biaxial[0][1]) +
                    "+/-" + str(stress_calcul.tensor_biaxial[1][1, 1]**0.5) +
                    "MPa" + "\n")
            f.write("---------------------- \n")

        if len(stress_calcul.liste_phi
               ) >= 1 and stress_calcul.length_strain == 4:
            f.write("---Biaxial stress----- \n")
            f.write('sigma 11 = ' + str(stress_calcul.tensor_biaxial[0][0]) +
                    "+/-" + str(stress_calcul.tensor_biaxial[1][0, 0]**0.5) +
                    "MPa" + "\n")
            f.write('sigma 22 = ' + str(stress_calcul.tensor_biaxial[0][2]) +
                    "+/-" + str(stress_calcul.tensor_biaxial[1][2, 2]**0.5) +
                    "MPa" + "\n")
            f.write('sigma 12 = sigma 21 = ' +
                    str(stress_calcul.tensor_biaxial[0][1]) + "+/-" +
                    str(stress_calcul.tensor_biaxial[1][1, 1]**0.5) + "MPa" +
                    "\n")
            f.write("---------------------- \n")

        if len(stress_calcul.liste_phi
               ) >= 1 and stress_calcul.length_strain == 5:
            f.write("---Biaxial+shear stress----- \n")
            f.write('sigma 11 = ' +
                    str(stress_calcul.tensor_biaxial_shear[0][0]) + "+/-" +
                    str(stress_calcul.tensor_biaxial_shear[1][0, 0]**0.5) +
                    "MPa" + "\n")
            f.write('sigma 22 = ' +
                    str(stress_calcul.tensor_biaxial_shear[0][1]) + "+/-" +
                    str(stress_calcul.tensor_biaxial_shear[1][1, 1]**0.5) +
                    "MPa" + "\n")
            f.write('sigma 13 = sigma 31 = ' +
                    str(stress_calcul.tensor_biaxial_shear[0][2]) + "+/-" +
                    str(stress_calcul.tensor_biaxial_shear[1][2, 2]**0.5) +
                    "MPa" + "\n")
            f.write('sigma 23 = sigma 32 = ' +
                    str(stress_calcul.tensor_biaxial_shear[0][3]) + "+/-" +
                    str(stress_calcul.tensor_biaxial_shear[1][3, 3]**0.5) +
                    "MPa" + "\n")
            f.write("---------------------- \n")

        if len(stress_calcul.liste_phi
               ) >= 1 and stress_calcul.length_strain >= 6:
            f.write("---Biaxial+shear stress----- \n")
            f.write('sigma 11 = ' +
                    str(stress_calcul.tensor_biaxial_shear[0][0]) + "+/-" +
                    str(stress_calcul.tensor_biaxial_shear[1][0, 0]**0.5) +
                    "MPa" + "\n")
            f.write('sigma 22 = ' +
                    str(stress_calcul.tensor_biaxial_shear[0][2]) + "+/-" +
                    str(stress_calcul.tensor_biaxial_shear[1][2, 2]**0.5) +
                    "MPa" + "\n")
            f.write('sigma 12 = sigma 12 = ' +
                    str(stress_calcul.tensor_biaxial_shear[0][1]) + "+/-" +
                    str(stress_calcul.tensor_biaxial_shear[1][1, 1]**0.5) +
                    "MPa" + "\n")
            f.write('sigma 13 = sigma 31 = ' +
                    str(stress_calcul.tensor_biaxial_shear[0][3]) + "+/-" +
                    str(stress_calcul.tensor_biaxial_shear[1][3, 3]**0.5) +
                    "MPa" + "\n")
            f.write('sigma 23 = sigma 32 = ' +
                    str(stress_calcul.tensor_biaxial_shear[0][4]) + "+/-" +
                    str(stress_calcul.tensor_biaxial_shear[1][4, 4]**0.5) +
                    "MPa" + "\n")
            f.write("---------------------- \n")

        if len(stress_calcul.liste_phi
               ) >= 1 and stress_calcul.length_strain >= 6:
            f.write("---Triaxial stress----- \n")
            f.write('sigma 11 = ' + str(stress_calcul.tensor_triaxial[0][0]) +
                    "+/-" + str(stress_calcul.tensor_triaxial[1][0, 0]**0.5) +
                    "MPa" + "\n")
            f.write('sigma 22 = ' + str(stress_calcul.tensor_triaxial[0][2]) +
                    "+/-" + str(stress_calcul.tensor_triaxial[1][2, 2]**0.5) +
                    "MPa" + "\n")
            f.write('sigma 12 = sigma 21 = ' +
                    str(stress_calcul.tensor_triaxial[0][1]) + "+/-" +
                    str(stress_calcul.tensor_triaxial[1][1, 1]**0.5) + "MPa" +
                    "\n")
            f.write('sigma 13 = sigma 31 = ' +
                    str(stress_calcul.tensor_triaxial[0][3]) + "+/-" +
                    str(stress_calcul.tensor_triaxial[1][3, 3]**0.5) + "MPa" +
                    "\n")
            f.write('sigma 23 = sigma 32 = ' +
                    str(stress_calcul.tensor_triaxial[0][4]) + "+/-" +
                    str(stress_calcul.tensor_triaxial[1][4, 4]**0.5) + "MPa" +
                    "\n")
            f.write('sigma 33 = ' + str(stress_calcul.tensor_triaxial[0][5]) +
                    "+/-" + str(stress_calcul.tensor_triaxial[1][5, 5]**0.5) +
                    "MPa" + "\n")
            f.write("---------------------- \n")

        f.write("---------------------------------------------------- \n")
        f.write("---------------------------------------------------- \n")

        f.write(
            "phi(°)    psi(°)    omega(°)     gamma(°)   peak_2theta(°)    phi_gamma(°)     psi_gamma(°)\n"
        )
        for i in range(len(main_calcul.phi)):
            progress["value"] = progress["value"] + 1
            progress.update()
            for j in range(main_calcul.gamma_number):
                gamma_range = int(main_calcul.gamma_f_index +
                                  j * main_calcul.gamma_step +
                                  main_calcul.gamma_step / 2)
                try:
                    f.write(str("%3.4g" % main_calcul.phi[i]))
                    f.write(str("%10.4g" % main_calcul.chi[i]))
                    f.write(str("%12.4g" % main_calcul.omega[i]))
                    f.write(str("%15.4g" % main_calcul.gamma_y[gamma_range]))
                    f.write(
                        str("%15.4g" % main_calcul.peaks_position[
                            i * main_calcul.gamma_number + j]))
                    f.write(
                        str("%15.4g" % stress_calcul.phi_regroup[
                            i * main_calcul.gamma_number + j]))
                    f.write(
                        str("%15.4g" % stress_calcul.psi_regroup[
                            i * main_calcul.gamma_number + j]))
                except TypeError:
                    pass
                f.write("\n")
        f.close()
        for widget in main.Frame1_2.winfo_children():
            widget.destroy()
    main.root.mainloop()
コード例 #23
0
def export_all_stress_graphs(stress_calcul, analyze_1D, run_program):
    location = askdirectory(title="Please choose a directory")
    if location is not None and location is not '':
        for widget in analyze_1D.Frame1_2.winfo_children():
            widget.destroy()
        Label(analyze_1D.Frame1_2, text="Export").pack(side=LEFT)
        progress = Progressbar(analyze_1D.Frame1_2,
                               orient="horizontal",
                               mode='determinate')
        progress.pack(side=LEFT)
        progress["value"] = 0
        progress["maximum"] = len(stress_calcul.liste_phi)
        for i in range(len(stress_calcul.liste_phi)):
            progress["value"] = progress["value"] + 1
            progress.update()

            fig = plt.figure(figsize=(10, 10), dpi=100)
            ax = fig.add_subplot(111)
            plt.plot(stress_calcul.matrix_sin_psi_i_2[i],
                     stress_calcul.matrix_displacement[i],
                     'ro',
                     label='Experimental')
            for j in range(len(stress_calcul.matrix_psi_i[i])):
                plt.annotate(str("%0.1f" % stress_calcul.matrix_psi_i[i][j]),
                             xy=(stress_calcul.matrix_sin_psi_i_2[i][j],
                                 stress_calcul.matrix_displacement[i][j]))
            if stress_calcul.stress_valid >= 1:
                plt.plot(stress_calcul.matrix_sin_psi_i_2_sorted[i],
                         stress_calcul.matrix_F_linear[i],
                         'b',
                         label='Linear fit')
                plt.plot(stress_calcul.matrix_sin_psi_i_2_sorted[i],
                         stress_calcul.matrix_F_elliptic[i],
                         'k',
                         label='Eliptic fit')
            if stress_calcul.stress_valid == 1:
                plt.plot(stress_calcul.matrix_sin_psi_i_2_sorted[0],
                         stress_calcul.e_uniaxial,
                         'm',
                         label='Uniaxial')
                plt.plot(stress_calcul.matrix_sin_psi_i_2_sorted[0],
                         stress_calcul.e_uniaxial_shear,
                         'y',
                         label='Uniaxial+shear')
            if stress_calcul.sigma12_valid == False and stress_calcul.stress_valid >= 2:
                plt.plot(stress_calcul.matrix_sin_psi_i_2_sorted[i],
                         stress_calcul.e_biaxial_simple[i],
                         'm',
                         label='Biaxial')
                plt.plot(stress_calcul.matrix_sin_psi_i_2_sorted[i],
                         stress_calcul.e_biaxial_simple_shear[i],
                         'y',
                         label='Biaxial+shear')
            if stress_calcul.sigma12_valid == True:
                plt.plot(stress_calcul.matrix_sin_psi_i_2_sorted[i],
                         stress_calcul.e_biaxial[i],
                         'm',
                         label='Biaxial')
                plt.plot(stress_calcul.matrix_sin_psi_i_2_sorted[i],
                         stress_calcul.e_biaxial_shear[i],
                         'y',
                         label='Biaxial+shear')
                if stress_calcul.stress_valid >= 3:
                    plt.plot(stress_calcul.matrix_sin_psi_i_2_sorted[i],
                             stress_calcul.e_triaxial[i],
                             'r',
                             label='Triaxial')
            plt.xlabel(r"$sin^{2}\psi$")
            plt.ylabel('Strain')
            plt.title("phi=" + str(stress_calcul.liste_phi[i]) + "")
            plt.legend(loc='upper left',
                       bbox_to_anchor=(0.0, -0.3, 1, 0),
                       ncol=3,
                       mode="expand",
                       borderaxespad=0.,
                       fontsize='x-small')
            plt.subplots_adjust(bottom=0.4)
            plt.savefig(str(location) + "/stress_phi=" +
                        str(float(stress_calcul.liste_phi[i])) + ".png",
                        bbox_inches="tight")
            plt.close()
        for widget in analyze_1D.Frame1_2.winfo_children():
            widget.destroy()
    run_program.fenetre.mainloop()
コード例 #24
0
def export_all_fitting_data_2D(calcul_2D, calib_2D, analyze_2D, run_program):
    f = asksaveasfile(title="Export data",
                      mode='w',
                      defaultextension=".text",
                      filetypes=[('text files', '.txt'), ('all files', '.*')])
    if f is not None and f is not '':
        for widget in analyze_2D.Frame1_2.winfo_children():
            widget.destroy()
        Label(analyze_2D.Frame1_2, text="Export").pack(side=LEFT)
        progress = Progressbar(analyze_2D.Frame1_2,
                               orient="horizontal",
                               mode='determinate')
        progress.pack(side=LEFT)
        progress["value"] = 0
        progress["maximum"] = len(calcul_2D.phi) * calcul_2D.gamma_number_step
        for i in range(len(calcul_2D.phi)):
            for j in range(calcul_2D.gamma_number_step):
                progress["value"] = progress["value"] + 1
                progress.update()

                f.write("phi=" + str(calcul_2D.phi[i]) + "\n")
                f.write("psi=" + str(calcul_2D.psi[i]) + "\n")
                f.write("peak=" + str(calcul_2D.all_two_theta_pearson[
                    i * calcul_2D.gamma_number_step + j]) + " +/- " +
                        str(calcul_2D.all_error_two_theta_pearson[
                            i * calcul_2D.gamma_number_step + j]) + "\n")
                f.write("peak width=" + str(calcul_2D.all_peak_width[
                    i * calcul_2D.gamma_number_step + j]) + " +/- " +
                        str(calcul_2D.all_error_peak_width[
                            i * calcul_2D.gamma_number_step + j]) + "\n")
                f.write("peak intensity=" +
                        str(calcul_2D.all_I_max[i * calcul_2D.gamma_number_step
                                                + j]) + " +/- " +
                        str(calcul_2D.all_error_I_max[
                            i * calcul_2D.gamma_number_step + j]) + "\n")
                f.write("gamma integrate from " + str(
                    int(calcul_2D.gamma_i[int(
                        calcul_2D.gamma_from + j * calcul_2D.gamma_stepline -
                        calcul_2D.gamma_stepline / 2)])) + "° to " + str(
                            int(calcul_2D.gamma_i[
                                int(calcul_2D.gamma_from +
                                    j * calcul_2D.gamma_stepline +
                                    calcul_2D.gamma_stepline / 2)])) + "\n")
                f.write(" two_theta\t")
                f.write("instensity\t")
                f.write("background\t")
                f.write("substrat_background\t")
                f.write("   kalpha1\t")
                f.write("   kalpha2\t")
                f.write("fitting_pearson_vii\t")
                f.write("\n")

                for m in range(len(calcul_2D.two_theta_limit)):
                    try:
                        f.write(str(calcul_2D.two_theta_limit[m]) + "\t")
                        f.write(
                            str(calcul_2D.all_matrix_intensity[i][j][m]) +
                            "\t")
                        f.write(
                            str(calcul_2D.all_matrix_background_intensity[i][j]
                                [m]) + "\t")
                        f.write(
                            str(calcul_2D.all_matrix_real_intensity[i][j][m]) +
                            "\t")
                        f.write(
                            str(calcul_2D.all_matrix_F1_peak1[i][j][m]) + "\t")
                        f.write(
                            str(calcul_2D.all_matrix_F2_peak1[i][j][m]) + "\t")
                        f.write(
                            str(calcul_2D.all_matrix_F_pearson[i][j][m]) +
                            "\t")
                        f.write("\n")
                    except (IndexError, ValueError):
                        pass
                f.write("--------------------------------------\n")
                f.write("--------------------------------------\n")
        f.close()
        for widget in analyze_2D.Frame1_2.winfo_children():
            widget.destroy()
    run_program.fenetre.mainloop()
コード例 #25
0
class BatchEditTopLevel(tk.Toplevel):
    def __init__(self, master=None, cnf={}, **kw):
        super(BatchEditTopLevel, self).__init__(master=master, cnf={}, **kw)

        self.resizable(width=False, height=False)
        self.initialize()

    def get_source_format_selected(self):
        source_format_selected = [
            chk_btn.cget("text").lower()
            for chk_btn, state in self.source_format_list
            if state.get() == True
        ]
        return source_format_selected

    def initialize(self):
        # Source format Checkbox list
        self.source_format_list = []
        self.frame_source_format = tk.LabelFrame(self, text="Source formats")
        self.frame_source_format.pack(side=tk.TOP, fill=tk.BOTH)
        # Tuple list to save btn widget & the checkbox state variable
        for idx, filetype in enumerate(OPEN_FILETYPES[1:]):
            checkbox_state = tk.IntVar()
            self.source_format_list.append((
                tk.Checkbutton(
                    self.frame_source_format,
                    text=filetype[1][1:].upper(),
                    variable=checkbox_state,
                    onvalue=True,
                    offvalue=False,
                ),
                checkbox_state,
            ))
            self.source_format_list[idx][0].pack(side=tk.LEFT)
        # Setting default input format
        self.source_format_list[0][0].toggle()

        # Destination Format Option Menu
        self.frame_destination_format = tk.Frame(self)
        self.frame_destination_format.pack(side=tk.TOP, fill=tk.X)
        tk.Label(self.frame_destination_format,
                 text="Destination format:").pack(side=tk.LEFT)
        self.dest_format = tk.StringVar(self)
        self.dest_format.set(SAVE_EXT_LIST[0].upper())
        self.dest_menu = tk.OptionMenu(
            self.frame_destination_format,
            self.dest_format,
            *[fmt.upper() for fmt in SAVE_EXT_LIST],
        )
        self.dest_menu.pack(side=tk.LEFT)
        tk.Button(
            self.frame_destination_format,
            text="Process Batch Edit",
            command=self._root().batch_edit,
        ).pack(side=tk.LEFT)

        def _select_folder(folder_path, Event=None):
            folder_path.set(filedialog.askdirectory(initialdir=os.curdir))
            self.focus()

        def widget_entry_template(
                frame,
                label,
                starting_value="",
                entry_width=60,
                label_width=len("Destination folder:"),
        ):
            entry_frame = tk.Frame(frame)
            entry_frame.pack(side=tk.TOP, fill=tk.X)
            tk.Label(entry_frame, text=label, width=label_width,
                     anchor=tk.W).pack(side=tk.LEFT)
            entry_frame.entry_value = tk.StringVar(value=starting_value)
            entry_path = tk.Entry(
                entry_frame,
                textvariable=entry_frame.entry_value,
                width=60,
                exportselection=0,
            )
            entry_path.pack(side=tk.LEFT)
            tk.Button(
                entry_frame,
                text="...",
                command=lambda: (_select_folder(entry_frame.entry_value)),
            ).pack(side=tk.LEFT)
            return entry_frame

        self.frame_batch_src_path = widget_entry_template(
            self, "Source folder:")
        self.frame_batch_dest_path = widget_entry_template(
            self, "Destination folder:")

        self.frame_progress_bar = tk.LabelFrame(self,
                                                relief=tk.RIDGE,
                                                bd=2,
                                                text="Awaiting process")
        self.frame_progress_bar.pack(side=tk.TOP, fill=tk.BOTH)

        self.progress_bar = Progressbar(
            self.frame_progress_bar,
            orient=HORIZONTAL,
            length=self.cget("width"),
            mode="determinate",
        )
        self.progress_bar.pack(side=tk.LEFT)

    def update_progress_bar_label(self, current: int):
        max = self.progress_bar["maximum"]
        self.progress_bar["value"] = current
        self.frame_progress_bar.configure(
            text=f"Completed {current}/{max} file(s)")
        self.progress_bar.update()
コード例 #26
0
    def tableBox1(self):
        while self.filenameQueue:
            if self.__ButtonState:
                paths = self.filenameQueue[0]
                if not os.path.exists(paths[1]):
                    sourceFilename = os.path.split(paths[0])[1]
                    destFilename = os.path.split(paths[1])[1]
                    maximumValue = os.path.getsize(paths[0])
                    #print(maximumValue)

                    row = Frame(self.__veriticalScrollFrame.interior)
                    sourceLab = Label(row, text=r'..\%s\%s' %(self.currentDate, sourceFilename), relief='sunken',  width=30)
                    destLab = Label(row, text=r'..\%s\%s' %(self.currentDate, destFilename), relief='sunken',  width=30)
                    oprtnProgress = Progressbar(row, orient='horizontal', length=250, maximum=maximumValue, mode='determinate', value=0)
 
                    row.pack(side='top', expand='yes', fill='both')
                    sourceLab.pack(side='left', expand='yes', fill='both')
                    destLab.pack(side='left', expand='yes', fill='both')
                    oprtnProgress.pack(side='left', expand='yes', fill='both')

                    """

                    updateQueueValue = Queue()
                    copying_in_thread = Thread(target=self.copyingFiles, args=(maximumValue, paths[0], paths[1], updateQueueValue))
                    copying_in_thread.start()
           
                    while True:
                        time.sleep(0.25)
                        if not updateQueueValue.empty():
                            value = updateQueueValue.get()
                            print(value)
                            oprtnProgress['value'] = value
                            oprtnProgress.update()
                        else:
                            print('job done')
                            break
                    updateQueueValue.task_done()
                    copying_in_thread.join()

                    """

                    updateValue = self.chunkSize
                    with open(paths[0], 'rb') as fileFrom:
                        with open(paths[1], 'wb') as fileTo:
                            for _ in range(int(ceil(maximumValue//self.chunkSize)+1)):
                                bytesForm = fileFrom.read(self.chunkSize)
                                if bytesForm:
                                    fileTo.write(bytesForm)
                                oprtnProgress['value'] = updateValue
                                oprtnProgress.update()
                                updateValue = updateValue+self.chunkSize

                    self.update()
                    self.filenameQueue.remove(paths)
                else:
                    self.filenameQueue.remove(paths)
            else:
                print('operation Interrupted')
                break
        else:
            self.after(3000, self.tableBox1)
コード例 #27
0
ファイル: interface.py プロジェクト: anaplopes/app-barcode
class Application:
    def __init__(self, master=None):
        self.fontePadrao = ("Arial", "12")
        self.primeiroContainer = Frame(master)
        self.primeiroContainer["pady"] = 20
        self.primeiroContainer.pack()

        self.segundoContainer = Frame(master)
        self.segundoContainer["padx"] = 20
        self.segundoContainer.pack()

        self.terceiroContainer = Frame(master)
        self.terceiroContainer["padx"] = 20
        self.terceiroContainer.pack()

        self.quartoContainer = Frame(master)
        self.quartoContainer["pady"] = 20
        self.quartoContainer.pack()

        self.quintoContainer = Frame(master)
        self.quintoContainer["pady"] = 20
        self.quintoContainer.pack()

        self.sextoContainer = Frame(master)
        self.sextoContainer["pady"] = 20
        self.sextoContainer.pack()

        self.titulo = Label(self.primeiroContainer, text="Gerador de código")
        self.titulo["font"] = ("Arial", "14", "bold")
        self.titulo.pack()

        self.barcode_type = Label(self.segundoContainer,
                                  text="Tipo barcode",
                                  font=self.fontePadrao)
        self.barcode_type.pack(side=LEFT)
        self.barcode_type = Entry(self.segundoContainer)
        self.barcode_type["width"] = 10
        self.barcode_type["font"] = ("Calibri", "12")
        self.barcode_type.pack(side=LEFT)

        self.includetext = Label(self.segundoContainer,
                                 text="Incluir Texto",
                                 font=self.fontePadrao)
        self.includetext.pack(side=LEFT)
        self.includetext = Entry(self.segundoContainer)
        self.includetext["width"] = 10
        self.includetext["font"] = ("Calibri", "12")
        self.includetext.pack(side=RIGHT)

        self.pathfileLabel = Label(self.terceiroContainer,
                                   text="Local (*csv)",
                                   font=self.fontePadrao)
        self.pathfileLabel.pack(side=LEFT)
        self.pathfile = Entry(self.terceiroContainer)
        self.pathfile["width"] = 50
        self.pathfile["font"] = ("Calibri", "12")
        self.pathfile.pack(side=LEFT)

        self.search_path_file = Button(self.terceiroContainer)
        self.search_path_file["text"] = "Localizar Arquivo"
        self.search_path_file["width"] = 15
        self.search_path_file["command"] = self.open_explore_file
        self.search_path_file["fg"] = "black"
        self.search_path_file.pack(side=RIGHT, padx=10, pady=10)

        self.pathsaveLabel = Label(self.quartoContainer,
                                   text="Local salvar",
                                   font=self.fontePadrao)
        self.pathsaveLabel.pack(side=LEFT)
        self.pathsave = Entry(self.quartoContainer)
        self.pathsave["width"] = 50
        self.pathsave["font"] = ("Calibri", "12")
        self.pathsave.pack(side=LEFT)

        self.search_path_dir = Button(self.quartoContainer)
        self.search_path_dir["text"] = "Localizar diretorio"
        self.search_path_dir["width"] = 15
        self.search_path_dir["command"] = self.open_explore_dir
        self.search_path_dir.pack(side=RIGHT, padx=10, pady=10)

        self.generator = Button(self.quintoContainer)
        self.generator["text"] = "Executar"
        self.generator["font"] = ("Calibri", "12")
        self.generator["fg"] = "white"
        self.generator["width"] = 20
        self.generator["bg"] = "blue"
        self.generator["command"] = self.create_code
        self.generator.pack()

        # self.mensagem = Label(self.sextoContainer, text="")
        # self.mensagem["font"] = ("Calibri", "12", "italic")
        # self.mensagem.pack()

        self.progress = Progressbar(self.sextoContainer,
                                    orient="horizontal",
                                    maximum=100,
                                    mode="determinate")

    def open_explore_file(self):
        filename = askopenfilename()
        self.pathfile.delete(0, END)
        self.pathfile.insert(0, filename)

    def open_explore_dir(self):
        directory = askdirectory()
        self.pathsave.delete(0, END)
        self.pathsave.insert(0, directory)

    def progress_bar(self, current_value, count_lines):
        percent = (current_value * 100) / count_lines
        self.progress["value"] = percent
        self.progress.update()

    def count_lines(self, file):
        return sum(1 for row in open(file)) - 1

    def check_file(self, local_save, diretorio):
        full_path = f'{local_save}/{diretorio}'
        if not os.path.exists(full_path):
            return False
        return True

    def create_code(self):
        self.progress.pack(side=TOP, ipadx=100)
        file = self.pathfile.get()
        local_save = self.pathsave.get()
        code = self.barcode_type.get()
        text = True if self.includetext.get() == 'S' or self.includetext.get(
        ) == 's' else False
        count_lines = self.count_lines(file)
        current_value = 1
        try:
            with open(file, 'r', encoding='utf-8') as kit:
                file = csv.reader(kit, delimiter=';', quotechar=';')
                next(file)
                for row in file:
                    dir_exist = self.check_file(local_save, row[2])
                    if not dir_exist:
                        os.mkdir(f'{local_save}/{row[2]}')
                    image = treepoem.generate_barcode(
                        barcode_type=code,
                        data=row[0],
                        options={"includetext": text})
                    image.convert('1').save(
                        f'{local_save}/{row[2]}/{row[1]}.png')
                    current_value += 1
                    self.progress.after(
                        1000,
                        self.progress_bar(current_value=current_value,
                                          count_lines=count_lines))
                kit.close()
                messagebox.showinfo("Sucesso", "Códigos gerados!")
                root.quit()
        except Exception as e:
            messagebox.showerror("Erro", str(e))
コード例 #28
0
class import_XRD:
    def __init__(self,main):
        try:
            self.process(main)
        except Exception as e:
            showinfo(title="Warning",message=str(e)+"\n"+"\n"+str(traceback.format_exc()))
            return
        #else:
            #angles_modif.__init__(angles_modif,main)
        main.root.mainloop()
        
    def process(self,main):
        format_='*.gfrm;*.edf;*.tif;*.tiff;*.npy;*.cbf;*.mccd;*.xlf;*.nxs;*.raw;*.gfrm;*.EDF;*.TIF;*.TIFF;*.NPY;*.CBF;*.MCCD;*.XLF;*.NXS;*.RAW'
        f = askopenfilenames(parent=main.root,title="Open file",filetypes=[('all supported format',format_),('all files','.*')])
        self.file_link = main.root.tk.splitlist(f)      #list of file link, 1 dimensional list
        if len(self.file_link)>0:
            self.import_image_header(main) #read image header
        
            if len(self.phi)>0:
                self.progress["value"] = self.progress["value"]+1
                self.progress.update()
                self.destroy_widget(main)  #reset all frame (see frame list in fonction)
                self.graphic_frame3_1(main) #graphical representation

                self.progress["value"] = self.progress["value"]+1
                self.progress.update()
                self.attribute_graphic_frame3_2(main) #reset button in list (see in fonction)
        
        for widget in main.Frame1_2.winfo_children():
            widget.destroy()
        pack_Frame_2D(main,1)

    def import_image_header(self,main):    
            for widget in main.Frame1_2.winfo_children():
                widget.destroy()       
            Label(main.Frame1_2,text="Import").pack(side=LEFT)
            self.progress = Progressbar(main.Frame1_2,orient="horizontal",mode='determinate')
            self.progress.pack(side=LEFT)
            self.progress["value"] = 0
            self.progress["maximum"] = len(self.file_link)+2
            #-----------------find and affiche list phi, chi--------------------------------------
            self.filename=[]            #list of file name, 1 dimensional list
            self.phi=[]                 #list of phi, 1 dimensional list
            self.chi=[]                 #list of chi, 1 dimensional list
            self.omega=[]               #list of omega, 1 dimensional list
            self.twotheta_center=[]     #list of twotheta center, 1 dimensional list
            self.k_alpha=[]             #list of phi, 2 dimensional list: self.kalpha=[[kalpha1,kalpha2],[kalpha1,kalpha2],...]; kalpha1, kalpha2 are float
            self.nrow=[]                #list of number of row, 1 dimensional list
            self.ncol=[]                #list of number of column, 1 dimensional list
            self.row_tick=[]            #list of number of row tick, 2 dimensional list: self.row_tick=[[row_tick],[row_tick],....]; with len(row_tick)=nrow
            self.col_tick=[]            #list of number of column tick, 2 dimensional list: self.col_tick=[[col_tick],[col_tick],....]; with len(col_tick)=ncol
            self.center_row=[]          #list of detector center in row, 1 dimensional list
            self.center_col=[]          #list of detector center in column, 1 dimensional list
            self.distance=[]            #list of distance from detector to sample, 1 dimensional list
            self.nfile=[]               #list index of number of file of image, 1 dimensional list
            self.nimage_i=[]            #list index of number of image in one file, 1 dimensional list
            self.nimage=[]              #list index of number of image in total, 1 dimensional list
            self.file_info=[]           #list of header information of image, 2 dimensional list: self.file_info=[[header_info],[header_info],....]
            self.image=-1               #index of image
            self.dtyp='uint32'          #for raw image
            self.sep=''                #for raw image
            for i in range(len(self.file_link)):
                self.progress["value"] = self.progress["value"]+1
                self.progress.update()
                self.i=i
                
                self.f=self.file_link[i] #take file link
                f_split=self.f.split("/")
                self.filename.append(f_split[len(f_split)-1]) #take filename

                read_header_2D(i,self) #read image header with all the information above (phi, chi....), see \read_file\image_2D\read_image_2D

    def destroy_widget(self,main):
        for widget in main.Frame3_1_1.winfo_children():
            widget.destroy()
        for widget in main.Frame3_1_2.winfo_children():
            widget.destroy()
        for widget in main.Frame3_1_3_1.winfo_children():
            widget.destroy()
        for widget in main.Frame3_1_3_2.winfo_children():
            widget.destroy()
        for widget in main.Frame3_1_4.winfo_children():
            widget.destroy()
            
        #for widget in main.Frame3_2_1_1.winfo_children():
            #widget.destroy()
        #for widget in main.Frame3_2_1_2.winfo_children():
            #widget.destroy()
        for widget in main.Frame3_2_2.winfo_children():
            widget.destroy()
        for widget in main.Frame3_2_3.winfo_children():
            widget.destroy()
        for widget in main.Frame3_2_4.winfo_children():
            widget.destroy()
            
        for widget in main.Frame3_3_1.winfo_children():
            widget.destroy()
        #for widget in main.Frame3_3_2_1.winfo_children():
            #widget.destroy()
        #for widget in main.Frame3_3_2_2.winfo_children():
            #widget.destroy()
        for widget in main.Frame3_3_3.winfo_children():
            widget.destroy()
            
        #for widget in main.Frame3_4_1.winfo_children():
            #widget.destroy()
        #for widget in main.Frame3_4_2.winfo_children():
            #widget.destroy()
        #for widget in main.Frame3_4_3.winfo_children():
            #widget.destroy()
        for widget in main.Frame3_4_4_1_1.winfo_children():
            widget.destroy()
        for widget in main.Frame3_4_4_1_2.winfo_children():
            widget.destroy()
        for widget in main.Frame3_4_4_2.winfo_children():
            widget.destroy()
            
        for widget in main.Frame3_5_1.winfo_children():
            widget.destroy()
        for widget in main.Frame3_5_2.winfo_children():
            widget.destroy()
        for widget in main.Frame3_5_3_1.winfo_children():
            widget.destroy()
        for widget in main.Frame3_5_3_2.winfo_children():
            widget.destroy()
        for widget in main.Frame3_5_3_3.winfo_children():
            widget.destroy()
        for widget in main.Frame3_5_4_1.winfo_children():
            widget.destroy()
        for widget in main.Frame3_5_4_2.winfo_children():
            widget.destroy()
        for widget in main.Frame3_5_4_3.winfo_children():
            widget.destroy()

        for widget in main.Frame3_6_1.winfo_children():
            widget.destroy()
        for widget in main.Frame3_6_2_1.winfo_children():
            widget.destroy()
        for widget in main.Frame3_6_2_2.winfo_children():
            widget.destroy()
        for widget in main.Frame3_6_2_3.winfo_children():
            widget.destroy()
        for widget in main.Frame3_6_3_1.winfo_children():
            widget.destroy()
        for widget in main.Frame3_6_3_2.winfo_children():
            widget.destroy()
        for widget in main.Frame3_6_3_3.winfo_children():
            widget.destroy()
            
        for widget in main.Frame3_7_1.winfo_children():
            widget.destroy()
        for widget in main.Frame3_7_2.winfo_children():
            widget.destroy()
        for widget in main.Frame3_7_3.winfo_children():
            widget.destroy()
            
        for widget in main.Frame3_8_1.winfo_children():
            widget.destroy()
        for widget in main.Frame3_8_2.winfo_children():
            widget.destroy()
                       
    def graphic_frame3_1(self,main):
        Label(main.Frame3_1_3_2, text="Image legend",bg="white").grid(row=0,column=0)
        Label(main.Frame3_1_3_2, text="from").grid(row=1,column=0)
        self.legend_from_entry = Entry(main.Frame3_1_3_2,width=6)
        self.legend_from_entry.grid(row=2,column=0)
        
        Label(main.Frame3_1_3_2, text="to").grid(row=3,column=0)
        self.legend_to_entry = Entry(main.Frame3_1_3_2,width=6)
        self.legend_to_entry.grid(row=4,column=0)

        #Images color
        self.cmap_var=StringVar()
        Radiobutton(main.Frame3_1_3_2, text="hot", variable=self.cmap_var, value="hot").grid(row=5,column=0,sticky=W)
        Radiobutton(main.Frame3_1_3_2, text="cool", variable=self.cmap_var, value="GnBu").grid(row=6,column=0,sticky=W)
        Radiobutton(main.Frame3_1_3_2, text="gray", variable=self.cmap_var, value="gray").grid(row=7,column=0,sticky=W)
        Radiobutton(main.Frame3_1_3_2, text="nipy", variable=self.cmap_var, value="nipy_spectral").grid(row=8,column=0,sticky=W)
        self.cmap_var.set("hot")

        #images list
        scrollbar = Scrollbar(main.Frame3_1_1)
        scrollbar.pack(side = RIGHT, fill=Y) 
        mylist= Listbox(main.Frame3_1_1, yscrollcommand = scrollbar.set)
        mylist.pack(side = LEFT, fill = BOTH,expand=YES)
        for i in range(len(self.phi)):
            mylist.insert(END, str(i+1)+u'. \u03C6='+str(self.phi[i])+" ; "+u'\u03C7='+str(self.chi[i])+u"; \u03C9="+str(float(self.omega[i]))+
                          ' (.'+str(self.nfile[i]+1)+'.'+str(self.nimage_i[i]+1)+'.)')
        self.rotate=0 #init ratation value
        self.flip=0 #init flip value
        mylist.bind("<ButtonRelease-1>", lambda event: show_original_image(event,self,main))
        scrollbar.config(command = mylist.yview)
        
        #----------------affiche the first image valide---------------------------------------
        data=read_data_2D_1(0,self,main) #read image data
        data_dim=len(data.shape) #image dimension
                    
        if data_dim==2:                 
            self.intensity_2D=data
        elif data_dim==3:
            self.intensity_2D=data[0]
        else:
            self.intensity_2D=[]

        self.legend_from_entry.insert(0,0)
        self.legend_to_entry.insert(0,max(map(max, self.intensity_2D)))

        #plot image on frame
        fig=plt.figure(1,facecolor="0.94")
        plt.imshow(self.intensity_2D,cmap="hot",origin='lower')
        plt.title(u'\u03C6='+str(float(self.phi[0]))+" ; "+u'\u03C7='+str(float(self.chi[0]))+u"; \u03C9="+str(float(self.omega[0])))
        nrow=self.nrow[0]
        ncol=self.ncol[0]
        plt.yticks((1,nrow*0.25,nrow*0.5,nrow*0.75,nrow), ('%0.1f' % self.row_tick[0][0],
                                                           '%0.1f' % self.row_tick[0][int(nrow*0.25)],
                                                           '%0.1f' % self.row_tick[0][int(nrow*0.5)],
                                                           '%0.1f' % self.row_tick[0][int(nrow*0.75)],
                                                           '%0.1f' % self.row_tick[0][int(nrow-1)]))
        plt.xticks((1,ncol*0.25,ncol*0.5,ncol*0.75,ncol), ('%0.1f' % self.col_tick[0][0],
                                                           '%0.1f' % self.col_tick[0][int(ncol*0.25)],
                                                           '%0.1f' % self.col_tick[0][int(ncol*0.5)],
                                                           '%0.1f' % self.col_tick[0][int(ncol*0.75)],
                                                           '%0.1f' % self.col_tick[0][int(ncol-1)]))
        plt.xlabel("pixel")
        plt.ylabel("pixel")
        plt.colorbar( cax=plt.axes([0.9, 0.45, 0.02, 0.4]) )
        plt.close()
         
        canvas = FigureCanvasTkAgg(fig, main.Frame3_1_2)
        canvas.get_tk_widget().pack(fill=BOTH, expand=YES)

        Button(main.Frame3_1_3_1,compound=CENTER, text="Original",bg="white",command=lambda:rotate_0(self,main)).pack() 
        Button(main.Frame3_1_3_1,compound=CENTER, text="Rotate +90°",bg="white",command=lambda:rotate_270(self,main)).pack()
        Button(main.Frame3_1_3_1,compound=CENTER, text="Rotate -90°",bg="white",command=lambda:rotate_90(self,main)).pack()    
        Button(main.Frame3_1_3_1,compound=CENTER, text="Rotate +180°",bg="white",command=lambda:rotate_180(self,main)).pack()    
        Button(main.Frame3_1_3_1,compound=CENTER, text="Flip horizontal",bg="white",command=lambda:flip_horizontal(self,main)).pack() 
        Button(main.Frame3_1_3_1,compound=CENTER, text="Flip vertical",bg="white",command=lambda:flip_vertical(self,main)).pack() 

        scrollbar = Scrollbar(main.Frame3_1_4)
        scrollbar.pack(side = RIGHT, fill=BOTH) 
        mylist = Listbox(main.Frame3_1_4, yscrollcommand = scrollbar.set)

        for i in range(len(self.file_info[0])):
            mylist.insert(END,str(self.file_info[0][i]))

        mylist.pack(side = LEFT, fill=BOTH,expand=YES)
        scrollbar.config( command = mylist.yview )

           
        #----------Frame3_2-------------------------------------------------------------------------
    def graphic_frame3_2(self,main):
        Label(main.Frame3_2_1_1, text="PONI PARAMETERS", bg="white").grid(row=0,column=0,sticky=W)
        Label(main.Frame3_2_1_1, text="Pixel size 1 (m)").grid(row=1,column=0,sticky=W)
        Label(main.Frame3_2_1_1, text="Pixel size 2 (m)").grid(row=2,column=0,sticky=W)
        Label(main.Frame3_2_1_1, text="Distance (m)").grid(row=3,column=0,sticky=W)
        Label(main.Frame3_2_1_1, text="Poni 1 (m)").grid(row=4,column=0,sticky=W)
        Label(main.Frame3_2_1_1, text="Poni 2 (m)").grid(row=5,column=0,sticky=W)
        Label(main.Frame3_2_1_1, text="Rotation 1 (radians)").grid(row=6,column=0,sticky=W)
        Label(main.Frame3_2_1_1, text="Rotation 2 (radians)").grid(row=7,column=0,sticky=W)
        Label(main.Frame3_2_1_1, text="Rotation 3 (radians)").grid(row=8,column=0,sticky=W)
        Label(main.Frame3_2_1_1, text="Wavelength (m)").grid(row=9,column=0,sticky=W)
                  
        self.Entry_pixel_1 = Entry(main.Frame3_2_1_1)
        self.Entry_pixel_2 = Entry(main.Frame3_2_1_1)
        self.Entry_distance_calib = Entry(main.Frame3_2_1_1)
        self.Entry_poni_1 = Entry(main.Frame3_2_1_1)
        self.Entry_poni_2 = Entry(main.Frame3_2_1_1)
        self.Entry_rot_1 = Entry(main.Frame3_2_1_1)
        self.Entry_rot_2 = Entry(main.Frame3_2_1_1)
        self.Entry_rot_3 = Entry(main.Frame3_2_1_1)
        self.Entry_wl_calib = Entry(main.Frame3_2_1_1)
                 
        self.Entry_pixel_1.grid(row=1, column=1,sticky=W)
        self.Entry_pixel_2.grid(row=2, column=1,sticky=W)
        self.Entry_distance_calib.grid(row=3, column=1,sticky=W)
        self.Entry_poni_1.grid(row=4, column=1,sticky=W)
        self.Entry_poni_2.grid(row=5, column=1,sticky=W)
        self.Entry_rot_1.grid(row=6, column=1,sticky=W)
        self.Entry_rot_2.grid(row=7, column=1,sticky=W)
        self.Entry_rot_3.grid(row=8, column=1,sticky=W)
        self.Entry_wl_calib.grid(row=9, column=1,sticky=W)

        Label(main.Frame3_2_1_1, text="2\u03B8 direction in original images").grid(row=10,column=0,sticky=W)
        self.direction_2theta=IntVar()
        Radiobutton(main.Frame3_2_1_1, text="horizontal", variable=self.direction_2theta, value=1).grid(row=10,column=1,sticky=W)
        Radiobutton(main.Frame3_2_1_1, text="vertical", variable=self.direction_2theta, value=2).grid(row=10,column=2,sticky=W)
        self.direction_2theta.set(1)
        
        Button(main.Frame3_2_1_1,compound=CENTER, text="PONI definition",bg="white",command=definition_poni).grid(row=11,column=0,sticky=W)
        Button(main.Frame3_2_1_1,compound=CENTER, text="Import poni parameters",bg="white",command=lambda:import_poni_parameters(self,main)).grid(row=0,column=1,sticky=W)
        self.button_run_calib=Button(main.Frame3_2_1_1,compound=CENTER, text="RUN CALIBRATION",bg="white",command=lambda:None)
        self.button_run_calib.grid(row=0,column=2,sticky=W)     
        Button(main.Frame3_2_1_1,compound=CENTER, text="Create PONI parameters",bg="white",command=lambda:pyFAI_calib()).grid(row=12,column=0,sticky=W)
        
    def attribute_graphic_frame3_2(self,main):
        self.button_run_calib.config(command=lambda:calib_2D(self,main))
        calib_2D.button_apply.config(command=lambda:None)
        calib_2D.button_init.config(command=lambda:None)
        calib_2D.button_advance.config(command=lambda:None)
        calib_2D.button_init_wavelength.config(command=lambda:None)
        calib_2D.button_psc.config(command=lambda:None)
        calib_2D.Button_limit_preview.config(command=lambda:None) 
        calib_2D.Button_fit_preview.config(command=lambda:None)       
        calib_2D.Button_run_calcul.config(command=lambda:None)

        angles_modif.Button_import_gma.config(command=lambda:None)
        angles_modif.Button_next.config(command=lambda:None)
        angles_modif.Button_apply_gma.config(command=lambda:None)
コード例 #29
0
def displayLoop(TS):
    #use to tkinter to produce a window, title it, set its size
    root = tk.Tk()
    root.title('VAN Monitor')
    root.geometry("700x350")

    #produce first label, used to show recieved messages
    label = tk.Label(root, text="")
    label.config(font=("Courier", 15))
    label.pack(padx=20, pady=20)
    label.config(text="Last recieved: ")

    #produce additional label for listing ultrasound distances in cm
    uslabel = tk.Label(root, text="Ultrasound distance:")
    uslabel.config(font=("Courier", 15))
    uslabel.pack(padx=20, pady=2)
    #also show this using a progressbar
    bar = Progressbar(root, length=650)
    bar['value'] = 0
    bar.pack(padx=20, pady=2)

    #labelled, progressbar showing IMU acceleration of buggy, stringly affected by buggy angle due to gravity
    acclabel = tk.Label(root, text="Inclination: ")
    acclabel.config(font=("Courier", 15))
    acclabel.pack(padx=20, pady=2)
    accbar = Progressbar(root, length=650)
    accbar['value'] = 0
    accbar.pack(padx=20, pady=2)

    #labelled progressbar showing velocity of buggy rotation from above (IMU Z axis)
    turnlabel = tk.Label(root, text="Turnspeed: ")
    turnlabel.config(font=("Courier", 15))
    turnlabel.pack(padx=20, pady=2)
    turnbar = Progressbar(root, length=650)
    turnbar['value'] = 0
    turnbar.pack(padx=20, pady=2)

    #text changed depending on whether buggy is blocked or not
    obsticleLabel = tk.Label(root, text=" ")
    obsticleLabel.config(font=("Courier", 15))
    obsticleLabel.pack(padx=20, pady=0)

    #text changed depending on whether buggy is rolled over or not
    rolloverLabel = tk.Label(root, text=" ")
    rolloverLabel.config(font=("Courier", 15))
    rolloverLabel.pack(padx=0, pady=0)

    #start these labels without assuming the state of the buggy, messages updating these only sent when states change
    obsticleLabel.config(text="No report")
    rolloverLabel.config(text="No report")

    while (TS.running):
        time.sleep(0.001)

        if TS.received:  #TS.received set by serial thread, list of received message bytes
            try:  #corrupt messages should not have been added, but use try as an additional precaution
                message = TS.received  #copy message content to integer variables, destination not used
                src = int(message[1])
                cmd = int(message[3])
                dat0 = int(message[4])
                dat1 = int(message[5])
                TS.received.clear(
                )  #clear to prevent acting on same message twice

            except:
                TS.received.clear()  #clear corrupt message

            else:
                TS.received.clear(
                )  #clear anyway, in case of possibility of some value being evaulated as false

                #attempt to get source and command names, if not in definitions.py, proceed using integer value
                try:
                    srcName = address2Name[src]
                except:
                    srcName = src

                try:
                    cmdName = command2Name[cmd]
                except:
                    cmdName = cmd

#messages from ultrasound are a 'special case'- Ans use a unique method of display
                if srcName == "ULTRASOUND":
                    distance = int(
                        (256 * dat0) + dat1
                    )  #convert both databytes to single integer (sign not required)

                    bar['value'] = distance / 100  #scale for progressbar
                    bar.update()
                    uslabel.config(
                        text="Ultrasound distance: " +
                        str(int(distance / 60)) + "cm"
                    )  #   /60 scale factor calulated from reading at 50cm

#another special case- reports from motors use dat0 as boolean clearahead(ultrasound), dat1 as boolean upright(IMU)
                elif ((srcName == "MOTORS") and (cmdName == "REPORT")):
                    if (dat0 == 1):
                        obsticleLabel.config(text="Clear Ahead")
                    else:
                        obsticleLabel.config(text="Obstructed")
                    if (dat1 == 1):
                        rolloverLabel.config(text="Upright")
                    else:
                        rolloverLabel.config(text="Rolled Over")

#special cases where IMU sends X axis acceleration with cmd=P0, or Z axis rotation velocity with cmd=P1
                elif (srcName == "IMU"):

                    if (cmdName == "P0"):
                        data = bytearray()
                        data.extend(
                            dat0.to_bytes(1, 'big', signed=False)
                        )  #requires conversion from 2 uint8's to one signed int16
                        data.extend(dat1.to_bytes(1, 'big', signed=False))
                        acceleration = int.from_bytes(data, 'big', signed=True)
                        data.clear()
                        accbar[
                            'value'] = 50 - acceleration / 20  #scale to give +/-90deg incline uses entire progressbar
                        accbar.update()

                    elif (cmdName == "P1"):
                        data = bytearray()
                        data.extend(dat0.to_bytes(1, 'big', signed=False))
                        data.extend(dat1.to_bytes(1, 'big', signed=False))
                        turnspeed = int.from_bytes(data, 'big', signed=True)
                        data.clear()
                        turnbar[
                            'value'] = 50 - turnspeed / 8  #not calibrated, scaled for maximum turning speed
                        turnbar.update()

#default for any other messages, where its components are simply listed
                else:
                    lastMessage = str(srcName) + " " + str(
                        cmdName) + " " + str(dat0) + " " + str(dat1)
                    label.config(text="Last recieved: " + lastMessage)
                    label.update()
コード例 #30
0
root = tk.Tk()
root.withdraw()

folder_path = Path(filedialog.askdirectory(title="Select folder with the outline.txt files..."))

progress_bar_window = tk.Tk()
progress_bar_window.title("Processing files...")
progress_bar_window.geometry('600x100')

num_files = len(list(folder_path.glob('*outlines.txt')))
bar = Progressbar(progress_bar_window, length=500)
bar['value'] = 0
bar['maximum'] = 500

bar.update()
bar.grid(column=0, row=0)
bar.pack()

file_cntr = 1
for file_path in folder_path.glob('*outlines.txt'):

    with open(file_path, 'r') as textfile:
        tmp_folder_path = file_path.parent / "tmp"
        tmp_folder_path.mkdir(exist_ok=True)

        # initialize zip file object
        zip_obj = ZipFile(file_path.parent / (str(file_path.stem) + '.zip'), 'w')

        line_cntr = 0
        for line in textfile:
コード例 #31
0
ファイル: main_gui.py プロジェクト: nishimaomaoxiong/pyDEA
class MainFrame(Frame):
    ''' This class implements main GUI of the application.

        Attributes:
            parent (Tk object): parent of this frame (Tk()).
            params_frame (ParamsFrame): frame with parameters.
            data_frame (DataFrame): frame with data and solution.
            progress_bar (Progressbar): progress bar widget.
            increment (int): progress bar increment, it is modified
                in other classes that are responsible for solving
                the problem and update progress.
            weights_status_lbl (Label): label that displays if weight
                restrictions are feasible.
            weights_status_str (StringVar): StringVar object used for
                tracking if weight restrictions are feasible.
            current_categories (list of str): list of current categories.

        Args:
            parent (Tk object): parent of this frame (Tk()).
    '''
    def __init__(self, parent, *args, **kwargs):
        Frame.__init__(self, parent, *args, **kwargs)
        self.parent = parent
        self.params_frame = None
        self.data_frame = None
        self.progress_bar = None
        self.increment = 0
        self.weights_status_lbl = None
        self.weights_status_str = StringVar()
        self.weights_status_str.trace('w', self.on_weights_status_change)
        self.current_categories = []
        self.create_widgets()

    def create_widgets(self):
        ''' Creates all widgets that belong to this frame.
        '''
        self.parent.title('pyDEA')
        self.pack(fill=BOTH, expand=1)

        self.columnconfigure(0, weight=1, pad=5)
        self.columnconfigure(1, weight=0, pad=5)
        self.rowconfigure(0, pad=3, weight=1)
        self.rowconfigure(1, pad=3)
        self.rowconfigure(2, pad=3)
        self.rowconfigure(3, pad=3)

        self.current_categories = []
        data_from_params_file = StringVar()
        str_var_for_input_output_boxes = ObserverStringVar()
        self.params_frame = ParamsFrame(self, self.current_categories,
                                        data_from_params_file,
                                        str_var_for_input_output_boxes,
                                        self.weights_status_str)
        data_frame = DataFrame(self, self.params_frame, self.current_categories,
                               data_from_params_file,
                               str_var_for_input_output_boxes)
        self.data_frame = data_frame
        data_frame.grid(row=0, column=0, sticky=N+S+W+E, padx=15, pady=15)

        self.params_frame.grid(row=0, column=1, sticky=W+E+S+N, padx=15,
                               pady=15, columnspan=2)

        lbl_progress = Label(self, text='Progress')
        lbl_progress.grid(row=1, column=0, sticky=W, padx=10, pady=5)

        self.progress_bar = Progressbar(self, mode='determinate', maximum=100)
        self.progress_bar.grid(row=2, column=0, sticky=W+E, padx=10, pady=5)

        run_btn = Button(self, text='Run', command=self.run)
        run_btn.grid(row=2, column=1, sticky=W, padx=10, pady=10)

        self.weights_status_lbl = Label(self, text='', foreground='red')
        self.weights_status_lbl.grid(row=2, column=2, padx=10, pady=5, sticky=W)

    def on_weights_status_change(self, *args):
        ''' This method is called when weight restrictions status is changed.
        '''
        self.weights_status_lbl.config(text=self.weights_status_str.get())

    def run(self):
        ''' This method is called when the user presses Run button.
            Solves the problem and displays solution.
        '''
        clean_up_pickled_files()
        params = self.params_frame.params
        run_method = RunMethodGUI(self)
        run_method.run(params)

    def construct_categories(self):
        ''' Returns current categories.

            Returns:
                (list of str): list of current categories
        '''
        return [category.strip() for category in self.current_categories
                if category]

    def on_dmu_change(self, *args):
        ''' Updates progress bar.
        '''
        self.progress_bar.step(self.increment)
        self.progress_bar.update()