예제 #1
0
    def __init__(self, mainwindow, cell):

        tk.Toplevel.__init__(self, mainwindow)

        self.main_frame = tkinter.ttk.Frame(self)
        self.main_frame.grid(sticky='nsew')
        self.mainwindow = mainwindow
        self.project = self.mainwindow.projects[self.mainwindow.currentprojectid]
        self.bfpp = cell.bfpp
        self.cell = cell
        
        self.title(self.cell.treetitle + ' Band Fit Window')
        
        # -------------------------------------------------- VARIABLES -------------------------------------------------
        self.label1 = tk.Label(self.main_frame, text='Band fit parameters', font='-weight bold')
        self.band_frame = tkinter.ttk.LabelFrame(self.main_frame, labelwidget=self.label1)
        self.band_frame.grid(row=2, column=0, pady=3, sticky='nsew')
        
        self.hs_kpoints_var = tk.StringVar(value=','.join(self.bfpp.hs_kpoints_names))

        # High Symmetry K-points
        hs_kpoints_frame = tkinter.ttk.Frame(self.band_frame)
        hs_kpoints_frame.grid(pady=3, sticky='nsew')
        tkinter.ttk.Label(hs_kpoints_frame, text='High symmetry K-points (comma-separated)').grid(sticky='nsew')
        tkinter.ttk.Entry(hs_kpoints_frame, textvariable=self.hs_kpoints_var, width=20).grid(sticky='nsew')

        # Energy range
        self.vbm_range = tu.RangeFrame(self.band_frame, self.bfpp.bands_fit['VBM'].xfitmin, self.bfpp.bands_fit['VBM'].xfitmax, 'VBM fit range', '', width=6)
        self.vbm_range.grid(sticky='nsew')
        self.cbm_range = tu.RangeFrame(self.band_frame, self.bfpp.bands_fit['CBM'].xfitmin, self.bfpp.bands_fit['CBM'].xfitmax, 'CBM fit range', '', width=6)
        self.cbm_range.grid(sticky='nsew')
        
        # ---------------------------------------------- DISPLAY PARAMS ------------------------------------------------
        
        self.display_param = tu.DisplayParametersFrame(self.main_frame, 'High-symmetry K-points', 'Energy', self.bfpp)
        self.display_param.frame.grid(row=3, column=0, pady=3, sticky='nsew')

        # --------------------------------------------------- BUTTONS --------------------------------------------------

        buttons_frame = tkinter.ttk.Frame(self.main_frame)
        buttons_frame.grid(pady=3, sticky='nsew')

        tkinter.ttk.Button(buttons_frame, text='Apply', command=self.save).grid(row=0, column=0, padx=5)
        tkinter.ttk.Button(buttons_frame, text='OK', command=lambda: self.save(close=True)).grid(row=0, column=1, padx=5)
        tkinter.ttk.Button(buttons_frame, text='Cancel', command=self.destroy).grid(row=0, column=2, padx=5)
예제 #2
0
    def __init__(self, mainwindow, project, opp):
        
        tk.Toplevel.__init__(self, mainwindow) 
        
        self.mainwindow = mainwindow
        self.project = project
        self.cell = self.project.cells[self.mainwindow.currentitemid].optical_indices
        self.opp = opp
        
        self.resizable(False, False)
        self.maxsize(width=self.winfo_screenwidth(), height=4*self.winfo_screenheight()//5)
        
        self.main_frame = tkinter.ttk.Frame(self)
        self.main_frame.grid(sticky='nsew')
        self.contain_frame = tu.ScrollableTableFrame(self.main_frame, '', []).interior
        
        self.title('Optical indices Plot Parameters Edition Window')
        
        # --------------------------------------------------- OPP name -------------------------------------------------
        
        self.label0 = tk.Label(self.contain_frame, text='Plot Parameters Name', pady=10)
        
        self.nameframe = tk.Frame(self.contain_frame)
        self.nameframe.grid(row=1, column=0)
        namelist = [opp.name for opp in list(self.project.pp['opp'].values())]
        self.oppname = tkinter.ttk.Combobox(self.nameframe, values=namelist, width=40) 
        self.oppname.set(self.opp.name)
        self.oppname.bind("<<ComboboxSelected>>", self.opp_select)
        self.label0.grid(row=0, column=0)
        self.oppname.grid(row=1, column=0)
        tk.ttk.Button(self.nameframe, text='Save as new parameters', command=self.opp_create).grid(row=1, column=1)

        # Data ID
        oplabel = tk.Label(self.contain_frame, text='Optical properties to plot', font=('', '16', 'bold'))
        self.op_frame = tkinter.ttk.LabelFrame(self.contain_frame, labelwidget=oplabel)
        data_frame = tkinter.ttk.Frame(self.op_frame)
        data_frame.grid(row=3, column=0, pady=3, sticky='nsew')

        self.data_id_var = tk.StringVar()
        tkinter.ttk.Label(data_frame, text='Optical property: ').pack(side='left')
        cb  = tkinter.ttk.Combobox(data_frame, textvariable=self.data_id_var, values=self.cell.quantities, width=10,
                          state='readonly')
        cb.pack(side='left')
        cb.bind("<<ComboboxSelected>>", self.quantity_list_update)
        cb.current(0)
        
        self.op_frame.grid(row=4, column=0, pady=3, sticky='nsew')
        
        self.quantities_pane = tkinter.ttk.Frame(self.contain_frame)
        self.quantities_rows = {}
        
        self.quantities_pane.grid(row=5, column=0, pady=3, sticky='nsew')
        
        # -------------------------------------------- SPECIFIC PARAMS ------------------------------------------------
        
        self.label0 = tk.Label(self.main_frame, text='Optical Indices Plot Specific Parameters', font='-weight bold')
        self.opp_param_frame = tkinter.ttk.LabelFrame(self.contain_frame, labelwidget=self.label0)
        self.opp_param_frame.grid(row=6, column=0, padx=3, pady=3, sticky='nsew')
        
        self.trace_only_var = tk.BooleanVar(value=opp.trace_only)
        tkinter.ttk.Checkbutton(self.opp_param_frame, text='Trace only', variable=self.trace_only_var).grid(row=0, padx=3, pady=3, sticky='nsew')
        
        self.h_shift_var = tk.DoubleVar(value=opp.h_shift)
        tkinter.ttk.Label(self.opp_param_frame, text='Scissor operator (horizontal shift) ').grid(row=1, column=0)
        # tk.Spinbox(self.opp_param_frame, textvariable=self.title_fontsize_var, width=3, from_=0, to=100).grid(row=0, column=1)
        tkinter.ttk.Entry(self.opp_param_frame, textvariable=self.h_shift_var, width=3).grid(row=1, column=1, sticky='we')
                
        # ---------------------------------------------- DISPLAY PARAMS ------------------------------------------------
        
        self.display_param = tu.DisplayParametersFrame(self.contain_frame, 'Energy', 'Optical indices', self.opp)
        self.display_param.frame.grid(row=7, column=0, pady=3, sticky='nsew')
        
        # Color
        self.label2 = tk.Label(self.contain_frame, text='Colors', font='-weight bold')
        self.colors_pane = tkinter.ttk.LabelFrame(self.contain_frame, labelwidget=self.label2)
        self.color_rows = {}
        self.colors_pane.grid(row=8, column=0, pady=3, sticky='nsew')
            
        self.update_window()
        
        # --------------------------------------------------- BUTTONS --------------------------------------------------
        
        buttons_frame = tkinter.ttk.Frame(self.main_frame)
        buttons_frame.grid()

        tkinter.ttk.Button(buttons_frame, text='Apply', command=lambda: self.save(False)).grid(row=0, column=0, padx=5)
        tkinter.ttk.Button(buttons_frame, text='OK', command=lambda: self.save(True)).grid(row=0, column=1, padx=5)
        tkinter.ttk.Button(buttons_frame, text='Cancel', command=self.destroy).grid(row=0, column=2, padx=5)
예제 #3
0
    def __init__(self, mainwindow, cell, bpp):

        tk.Toplevel.__init__(self, mainwindow)

        self.main_frame = tkinter.ttk.Frame(self)
        self.main_frame.pack(expand=True, fill='both')
        self.mainwindow = mainwindow
        self.project = self.mainwindow.projects[self.mainwindow.currentprojectid]
        self.bpp = bpp
        self.cell = cell
        
        self.title(self.cell.treetitle + ' Band Plot Parameters Edition Window')
        
        # --------------------------------------------------- BPP name -------------------------------------------------
        
        self.label0 = tk.Label(self.main_frame, text='Plot Parameters Name', pady=10)
        
        self.nameframe = tk.Frame(self.main_frame)
        self.nameframe.grid(row=1, column=0)
        namelist = [bpp.name for bpp in list(self.project.pp['bpp'].values())]
        self.bppname = tkinter.ttk.Combobox(self.nameframe, values=namelist, width=40) 
        self.bppname.set(self.bpp.name)
        self.bppname.bind("<<ComboboxSelected>>", self.bpp_select)
        self.label0.grid(row=0, column=0)
        self.bppname.grid(row=1, column=0)
        tk.ttk.Button(self.nameframe, text='Save as new parameters', command=self.bpp_create).grid(row=1, column=1)

        # -------------------------------------------------- VARIABLES -------------------------------------------------
        
        self.label1 = tk.Label(self.main_frame, text='Band plot parameters', font='-weight bold')
        self.band_frame = tkinter.ttk.LabelFrame(self.main_frame, labelwidget=self.label1)
        self.band_frame.grid(row=2, column=0, pady=3, sticky='nsew')

        self.vbm_shift_var = tk.BooleanVar(value=bpp.vbm_shift)
        self.highlight_vbm_cbm_var = tk.BooleanVar(value=bpp.highlight_vbm_cbm)
        self.hs_kpoints_var = tk.StringVar(value=','.join(bpp.hs_kpoints_names))
        self.discontinuities_var = tk.BooleanVar(value=bpp.discontinuities)
        self.nkpts_per_seg_var = tk.IntVar(value=bpp.nkpts_per_seg)
        # self.disc_hshift_var = tk.DoubleVar(value=bpp.disc_hshift)
        self.highlight_zero_line_var = tk.BooleanVar(value=bpp.highlight_zero_line)
        self.nkpts_hybrid_bands_var = tk.IntVar(value=bpp.nkpts_hybrid_bands)

        # VBM as zero of energy
        tkinter.ttk.Checkbutton(self.band_frame, text='VBM as zero of energy', variable=self.vbm_shift_var,
                        onvalue=True, offvalue=False, command=self.update_energy_range).grid(pady=3, sticky='nsew') 

        # VBM & CBM highlight
        tkinter.ttk.Checkbutton(self.band_frame, text='Highlight VBM & CBM', variable=self.highlight_vbm_cbm_var,
                        onvalue=True, offvalue=False).grid(pady=3, sticky='nsew')
                        
        # Highlight zero line
        tkinter.ttk.Checkbutton(self.band_frame, text='Highlight zero-line', variable=self.highlight_zero_line_var,
                        onvalue=True, offvalue=False).grid(pady=3, sticky='nsew')

        # High Symmetry K-points
        hs_kpoints_frame = tkinter.ttk.Frame(self.band_frame)
        hs_kpoints_frame.grid(pady=3, sticky='nsew')
        tkinter.ttk.Label(hs_kpoints_frame, text='High symmetry K-points (comma-separated)').pack(side='left')
        tkinter.ttk.Entry(hs_kpoints_frame, textvariable=self.hs_kpoints_var, width=20).pack(side='left')
        
        # Discontinuities
        tkinter.ttk.Checkbutton(self.band_frame, text='Discontinuities in the K-pts path', variable=self.discontinuities_var,
                        onvalue=True, offvalue=False).grid(pady=3, sticky='nsew')
        
        nkpts_per_seg_frame = tkinter.ttk.Frame(self.band_frame)
        nkpts_per_seg_frame.grid(pady=3, sticky='nsew')
        tkinter.ttk.Label(nkpts_per_seg_frame, text='Number of K-pts per segment').pack(side='left')
        tkinter.ttk.Entry(nkpts_per_seg_frame, textvariable=self.nkpts_per_seg_var, width=3).pack(side='left')
        
        nkpts_hybrid_bands_frame = tkinter.ttk.Frame(self.band_frame)
        nkpts_hybrid_bands_frame.grid(pady=3, sticky='nsew')
        if self.cell.functional in ['PBE0', 'HSE', 'Hybrid']:
            tkinter.ttk.Label(nkpts_hybrid_bands_frame, text='Number of K-pts used for \nBand Structure Calculation (Hybrid functionals only)').pack(side='left')
            tkinter.ttk.Entry(nkpts_hybrid_bands_frame, textvariable=self.nkpts_hybrid_bands_var, width=3).pack(side='left')
        
        # ---------------------------------------------- DISPLAY PARAMS ------------------------------------------------
        
        self.display_param = tu.DisplayParametersFrame(self.main_frame, 'High-symmetry K-points', 'Energy', self.bpp)
        self.display_param.frame.grid(row=3, column=0, pady=3, sticky='nsew')

        # --------------------------------------------------- BUTTONS --------------------------------------------------

        buttons_frame = tkinter.ttk.Frame(self.main_frame)
        buttons_frame.grid(pady=3, sticky='nsew')

        tkinter.ttk.Button(buttons_frame, text='Apply', command=self.save).grid(row=0, column=0, padx=5)
        tkinter.ttk.Button(buttons_frame, text='OK', command=lambda: self.save(close=True)).grid(row=0, column=1, padx=5)
        tkinter.ttk.Button(buttons_frame, text='Cancel', command=self.destroy).grid(row=0, column=2, padx=5)
예제 #4
0
    def __init__(self, mainwindow, cell, dpp):

        tk.Toplevel.__init__(self, mainwindow)
        self.resizable(False, False)
        self.maxsize(width=self.winfo_screenwidth(), height=4*self.winfo_screenheight()//5)
        self.minsize(height=4*self.winfo_screenheight()//5)
        
        self.cell = cell
        self.dpp = dpp
        self.mainwindow = mainwindow
        self.project = self.mainwindow.projects[self.mainwindow.currentprojectid]

        self.main_frame = tkinter.ttk.Frame(self)
        self.main_frame.grid(sticky='nsew')
        self.contain_frame = tu.ScrollableTableFrame(self.main_frame, '', []).interior
        
        cb_kwargs = {'onvalue': True, 'offvalue': False}
        
        self.title(self.cell.treetitle + ' DoS Plot Parameters Edition Window')
        
        # --------------------------------------------------- DPP name -------------------------------------------------
        
        self.label1 = tk.Label(self.contain_frame, text='Plot Parameters Name', pady=10)
        
        self.nameframe = tk.Frame(self.contain_frame)
        self.nameframe.grid(row=1, column=0)
        namelist = [dpp.name for dpp in list(self.project.pp['dpp'].values())]
        self.dppname = tkinter.ttk.Combobox(self.nameframe, values=namelist, width=40) #, validate='focusout', validatecommand=self.dpp_select_create)
        self.dppname.set(self.dpp.name)
        self.dppname.bind("<<ComboboxSelected>>", self.dpp_select)
        self.label1.grid(row=0, column=0)
        self.dppname.grid(row=1, column=0)
        tk.ttk.Button(self.nameframe, text='Save as new parameters', command=self.dpp_create).grid(row=1, column=1)
        
        # --------------------------------------------------- DoS type -------------------------------------------------

        self.spin_var = tk.BooleanVar(value=dpp.display_spin)

        # Frame label
        self.dostype_frame_label_frame = tkinter.ttk.Frame(self)
        tkinter.ttk.Label(self.dostype_frame_label_frame, text='DoS displayed', font='-weight bold').pack(side='left')
        # if self.cell.ispin == 2:
        #     ttk.Checkbutton(self.dostype_frame_label_frame, text='Spin projection', variable=self.spin_var, **cb_kwargs).pack()

        # Frame
        self.dostype_frame = tkinter.ttk.LabelFrame(self.contain_frame, labelwidget=self.dostype_frame_label_frame)
        self.dostype_frame.grid(row=2, column=0, sticky='nswe', padx=5)
        self.dostype_frame.grid_columnconfigure(0, weight=1)

        # Variables
        self.opas_items_choice = dpp.choice_opas  # Initial choice for the OPAS items choice
        self.opa_items_choice = dpp.choice_opa  # Initial choice for the OPA items choice
        self.proj_colors_choice = dpp.colors_proj  # Projected DoS colors choice
        self.tot_colors_choice = dpp.colors_tot  # Total projected DoS colors choice

        # -------------------------------------------------- TOTAL DoS -------------------------------------------------

        self.totdos_var = tk.BooleanVar(value=dpp.display_total_dos)
        tkinter.ttk.Checkbutton(self.dostype_frame, text='Total DoS', variable=self.totdos_var, **cb_kwargs).grid(row=2, column=0)

        # ------------------------------------------------ PROJECTED DoS -----------------------------------------------

        self.projdos_var = tk.BooleanVar()

        # Labelframe and checkbutton
        self.projdos_cb = tkinter.ttk.Checkbutton(self, text='Projected DoS', variable=self.projdos_var, command=self.enable_proj_dos, **cb_kwargs)
        self.projdos_frame = tkinter.ttk.LabelFrame(self.dostype_frame, labelwidget=self.projdos_cb, labelanchor='n')
        self.projdos_frame.grid(row=1, column=0, sticky='nswe', padx=5)
        self.projdos_frame.grid_columnconfigure(0, weight=1)
        self.projdos_frame.grid_columnconfigure(1, weight=1)

        # DoS type
        self.dostype_var = tk.StringVar(value=dpp.dos_type)
        tkinter.ttk.Label(self.projdos_frame, text='DoS for each').grid(row=0, column=0, sticky='w')
        tkinter.ttk.Radiobutton(self.projdos_frame, text='Atomic species', variable=self.dostype_var, value='OPAS').grid(row=1, column=0)
        tkinter.ttk.Radiobutton(self.projdos_frame, text='Atom', variable=self.dostype_var, value='OPA').grid(row=1, column=1)

        # Projection choice
        self.totprojdos_var = tk.BooleanVar(value=dpp.tot_proj_dos)
        tkinter.ttk.Label(self.projdos_frame, text='Projection').grid(row=2, column=0, sticky='w')
        tkinter.ttk.Radiobutton(self.projdos_frame, text='Orbitals projection', variable=self.totprojdos_var, value=False).grid(row=3, column=0)
        tkinter.ttk.Radiobutton(self.projdos_frame, text='Total DoS', variable=self.totprojdos_var, value=True).grid(row=3, column=1)

        # Areas or lines
        self.plotareas_var = tk.BooleanVar(value=dpp.plot_areas)
        tkinter.ttk.Label(self.projdos_frame, text='Projected DoS style').grid(row=4, column=0, sticky='w')
        tkinter.ttk.Radiobutton(self.projdos_frame, text='Filled areas', variable=self.plotareas_var, value=True).grid(row=5, column=0)
        tkinter.ttk.Radiobutton(self.projdos_frame, text='Lines', variable=self.plotareas_var, value=False).grid(row=5, column=1)

        tkinter.ttk.Label(self.projdos_frame, text=' ').grid(row=6, column=0)  # white space

        tkinter.ttk.Button(self.projdos_frame, text='Data plotted', command=self.open_atoms_choice_window).grid(row=7, column=0)
        tkinter.ttk.Button(self.projdos_frame, text='Colours', command=self.open_colour_choice_window).grid(row=7, column=1)
        
        if self.cell.lorbit == 11:
            self.projdos_var.set(dpp.display_proj_dos)
        else:
            self.projdos_var.set(False)
            self.projdos_cb.configure(state='disabled')
            tu.disable_frame(self.projdos_frame)

        # ------------------------------------------------ PLOT DISPLAY ------------------------------------------------

        self.display_frame_label = tkinter.ttk.Label(self, text='Options on data displayed', font="-weight bold")
        self.display_frame = tkinter.ttk.LabelFrame(self.contain_frame, labelwidget=self.display_frame_label)
        self.display_frame.grid(row=3, column=0, sticky='nswe', padx=5)

        # Fermi level
        self.efdisplay_var = tk.BooleanVar(value=dpp.display_Fermi_level)
        tkinter.ttk.Checkbutton(self.display_frame, text='Fermi level', variable=self.efdisplay_var, **cb_kwargs).grid(row=0, column=0, sticky='w')

        # Band extrema
        self.bedisplay_var = tk.BooleanVar(value=dpp.display_BM_levels)
        tkinter.ttk.Checkbutton(self.display_frame, text='Band extrema levels', variable=self.bedisplay_var, **cb_kwargs).grid(row=1, column=1, sticky='w')

        self.fermishift_var = tk.BooleanVar(value=dpp.fermi_shift)
        tkinter.ttk.Checkbutton(self.display_frame, text='Fermi level as zero of energy', variable=self.fermishift_var,
                        command=self.update_energy_range, **cb_kwargs).grid(row=0, column=1, sticky='w')
        
        self.normalize_var = tk.BooleanVar(value=dpp.normalize)
        tkinter.ttk.Checkbutton(self.display_frame, text='Normalize plots', variable=self.normalize_var,
                        command=self.update_normalize, **cb_kwargs).grid(row=1, column=0, sticky='w')
                        
        self.display_spin_var = tk.BooleanVar(value=dpp.display_spin)
        tkinter.ttk.Checkbutton(self.display_frame, text='Display spin projections', variable=self.display_spin_var, **cb_kwargs).grid(row=2, column=0, sticky='w')
        
        self.smooth_var = tk.BooleanVar(value=dpp.smooth)
        tkinter.ttk.Checkbutton(self.display_frame, text='Smooth DoS', variable=self.smooth_var, **cb_kwargs).grid(row=3, column=0, sticky='w')
        
        self.n_smooth_var = tk.IntVar(value=dpp.n_smooth)
        group_frame = tkinter.ttk.Frame(self.display_frame)
        tkinter.ttk.Label(group_frame, text='Moving average order').grid(row=0, column=0, sticky='nsew')
        tk.Spinbox(group_frame, textvariable=self.n_smooth_var, width=3, from_=2, to=dpp.nedos/2).grid(row=0, column=1, sticky='nsew')
        group_frame.grid(row=3, column=1, sticky='w')    

        # ---------------------------------------------- DISPLAY PARAMS ------------------------------------------------
        
        self.display_param = tu.DisplayParametersFrame(self.contain_frame, 'E', 'DoS', self.dpp)
        self.display_param.frame.grid(row=4, column=0, pady=3, sticky='nsew')

        # --------------------------------------------------- BUTTONS --------------------------------------------------

        buttons_frame = tkinter.ttk.Frame(self.main_frame)
        buttons_frame.grid(row=1, column=0, pady=3, sticky='nsew')

        tkinter.ttk.Button(buttons_frame, text='Apply', command=self.save).grid(row=0, column=0, padx=5)
        tkinter.ttk.Button(buttons_frame, text='OK', command=lambda: self.save(close=True)).grid(row=0, column=1, padx=5)
        tkinter.ttk.Button(buttons_frame, text='Cancel', command=self.destroy).grid(row=0, column=2, padx=5)
예제 #5
0
    def __init__(self, mainwindow, material_study):

        tk.Toplevel.__init__(self, mainwindow)

        self.mainwindow = mainwindow

        self.material_study = material_study

        self.eftpp = material_study.eftpp

        self.main_frame = ttk.Frame(self)
        self.main_frame.grid(sticky='nsew')
        self.main_frame.grid_columnconfigure(0, weight=1)
        self.title(material_study.treetitle +
                   ' Fermi Level Variations Plot Parameters Window')

        # --------------------------------------------- EFFECTIVE MASSE --------------------------------------------------

        label0 = tk.Label(self.main_frame,
                          text='Charge Carriers Effective Masses',
                          font='-weight bold')
        masses_frame = ttk.LabelFrame(self.main_frame, labelwidget=label0)
        masses_frame.grid(sticky='nsew')

        self.m_e_entry = tu.QuantityEntry(masses_frame,
                                          'Electrons effective mass',
                                          self.eftpp.m_e,
                                          ' me',
                                          width=5)
        self.m_e_entry.pack(padx=5, pady=5)
        self.m_h_entry = tu.QuantityEntry(masses_frame,
                                          'Holes effective mass',
                                          self.eftpp.m_h,
                                          ' me',
                                          width=5)
        self.m_h_entry.pack(padx=5, pady=5)

        # --------------------------------------------- TEMPERATURES --------------------------------------------------

        label1 = tk.Label(self.main_frame,
                          text='Temperatures',
                          font='-weight bold')
        temperature_frame = ttk.LabelFrame(self.main_frame, labelwidget=label1)
        temperature_frame.grid()

        tk.Label(temperature_frame,
                 text='Growth Temperature (fixed) ').grid(row=0, column=0)
        self.cte_temp = tu.QuantityEntry(temperature_frame,
                                         '',
                                         self.eftpp.temperature,
                                         'K',
                                         width=7)
        self.cte_temp.grid(row=0, column=1)

        self.temp_range = tu.RangeFrame(temperature_frame,
                                        self.eftpp.xmin,
                                        self.eftpp.xmax,
                                        'Ambiant Temperature',
                                        'K',
                                        step=self.eftpp.dt,
                                        width=7)
        self.temp_range.grid(row=1, column=0, columnspan=2, pady=5, padx=5)

        # Display parameters

        # ---------------------------------------------- DISPLAY PARAMS ------------------------------------------------

        self.display_param = tu.DisplayParametersFrame(
            self.main_frame, 'Ambiant Temperature',
            'Charge Carriers Concentrations', self.eftpp)
        self.display_param.frame.grid(row=2, column=0, pady=3, sticky='nsew')

        # --------------------------------------------------- BUTTONS --------------------------------------------------

        buttons_frame = ttk.Frame(self.main_frame)
        buttons_frame.grid(row=5, column=0, pady=3, sticky='nsew')

        ttk.Button(buttons_frame, text='Apply',
                   command=self.save).grid(row=0, column=0, padx=5)
        ttk.Button(buttons_frame,
                   text='OK',
                   command=lambda: self.save(close=True)).grid(row=0,
                                                               column=1,
                                                               padx=5)
        ttk.Button(buttons_frame, text='Cancel',
                   command=self.destroy).grid(row=0, column=2, padx=5)
예제 #6
0
    def __init__(self, mainwindow, material_study):

        tk.Toplevel.__init__(self, mainwindow)

        self.mainwindow = mainwindow

        self.material_study = material_study

        self.cpp = material_study.cpp

        self.main_frame = ttk.Frame(self)
        self.main_frame.grid(sticky='nsew')
        self.main_frame.grid_columnconfigure(0, weight=1)
        self.title(material_study.treetitle +
                   ' Defect Concentrations Plot Parameters Window')

        # --------------------------------------------- EFFECTIVE MASSE --------------------------------------------------

        label0 = tk.Label(self.main_frame,
                          text='Charge Carriers Effective Masses',
                          font='-weight bold')
        masses_frame = ttk.LabelFrame(self.main_frame, labelwidget=label0)
        masses_frame.grid(sticky='nsew')

        self.m_e_entry = tu.QuantityEntry(masses_frame,
                                          'Electrons effective mass',
                                          self.cpp.m_e,
                                          ' me',
                                          width=5)
        self.m_e_entry.pack(padx=5, pady=5)
        self.m_h_entry = tu.QuantityEntry(masses_frame,
                                          'Holes effective mass',
                                          self.cpp.m_h,
                                          ' me',
                                          width=5)
        self.m_h_entry.pack(padx=5, pady=5)

        # --------------------------------------------- TEMPERATURES --------------------------------------------------

        label1 = tk.Label(self.main_frame,
                          text='Temperatures',
                          font='-weight bold')
        temperature_frame = ttk.LabelFrame(self.main_frame, labelwidget=label1)
        temperature_frame.grid()

        tk.Label(temperature_frame,
                 text='Ambiant Temperature (fixed) ').grid(row=0, column=0)
        self.cte_temp = tu.QuantityEntry(temperature_frame,
                                         '',
                                         self.cpp.temperature,
                                         'K',
                                         width=7)
        self.cte_temp.grid(row=0, column=1)

        self.temp_range = tu.RangeFrame(temperature_frame,
                                        self.cpp.xmin,
                                        self.cpp.xmax,
                                        'Growth Temperature',
                                        'K',
                                        step=self.cpp.dt,
                                        width=7)
        self.temp_range.grid(row=1, column=0, columnspan=2, pady=5, padx=5)

        # --------------------------------------------- SPECIFIC OPTIONS --------------------------------------------------
        self.charge_carriers_var = tk.BooleanVar(
            value=self.cpp.charge_carriers)
        self.fill_type_var = tk.IntVar(value=self.cpp.fill_type)

        label11 = tk.Label(self.main_frame,
                           text='Specific options',
                           font='-weight bold')
        options_frame = ttk.LabelFrame(self.main_frame, labelwidget=label11)
        options_frame.grid(sticky='nsew')

        # Display charge carriers
        ttk.Checkbutton(
            options_frame,
            text='Display charge carriers concentrations ',
            variable=self.charge_carriers_var,
            command=self.set_display_charge_carriers).pack(side='left')
        # Fill conductivity type
        ttk.Checkbutton(options_frame,
                        text='Fill conductivity type ',
                        variable=self.fill_type_var,
                        command=self.set_fill_type).pack(side='left')

        # ---------------------------------------------- DISPLAY PARAMS ------------------------------------------------

        self.display_param = tu.DisplayParametersFrame(
            self.main_frame, 'Growth Temperature', 'Defect Concentrations',
            self.cpp)
        self.display_param.frame.grid(row=3, column=0, pady=3, sticky='nsew')

        # ---------------------------------------------- COLORS ------------------------------------------------
        self.label2 = tk.Label(self.main_frame,
                               text='Colors',
                               font='-weight bold')
        self.colors_pane = ttk.LabelFrame(self.main_frame,
                                          labelwidget=self.label2)
        self.colors = {}
        self.labels = {}
        self.index = 0

        def title(key):
            if key in ['n (electrons)', 'n (holes)', 'n type', 'p type']:
                return key
            else:
                return self.material_study.defect_studies[key].treetitle

        sort_list = [[key, title(key)] for key in self.cpp.colors.keys()]
        sort_list.sort(key=lambda x: x[1])

        for key, treetitle in sort_list:
            if key in self.cpp.data_id or (key in ['n type', 'p type']
                                           and self.cpp.fill_type):
                self.colors[key] = tk.Button(
                    self.colors_pane,
                    text='\t\t',
                    bg=self.cpp.colors[key],
                    command=lambda port=key: self.set_color(port))
                self.colors[key].grid(row=self.index, column=0, sticky='w')
                self.labels[key] = tk.Label(self.colors_pane, text=treetitle)
                self.labels[key].grid(row=self.index, column=1, sticky='w')
                self.index += 1

        self.colors_pane.grid(row=4, column=0, pady=3, sticky='nsew')

        # --------------------------------------------------- BUTTONS --------------------------------------------------

        buttons_frame = ttk.Frame(self.main_frame)
        buttons_frame.grid(row=5, column=0, pady=3, sticky='nsew')

        ttk.Button(buttons_frame, text='Apply',
                   command=self.save).grid(row=0, column=0, padx=5)
        ttk.Button(buttons_frame,
                   text='OK',
                   command=lambda: self.save(close=True)).grid(row=0,
                                                               column=1,
                                                               padx=5)
        ttk.Button(buttons_frame, text='Cancel',
                   command=self.destroy).grid(row=0, column=2, padx=5)
예제 #7
0
    def __init__(self, mainwindow, defect_study):

        tk.Toplevel.__init__(self, mainwindow)
        self.resizable(False, False)

        self.mainwindow = mainwindow
        self.project = self.mainwindow.projects[
            self.mainwindow.currentprojectid]
        self.fpp = defect_study.fpp

        self.main_frame = ttk.Frame(self)
        self.main_frame.pack(expand=True, fill='both')
        self.main_frame.grid_columnconfigure(0, weight=1)

        self.title(defect_study.treetitle +
                   ' Formation Energy Plot Parameters Edition Window')

        # ---------------------------------------------- FPP PARAMS ------------------------------------------------

        self.label0 = tk.Label(
            self.main_frame,
            text='Formation Energy Plot Specific Parameters',
            font='-weight bold')
        self.fpp_param_frame = ttk.LabelFrame(self.main_frame,
                                              labelwidget=self.label0)
        self.fpp_param_frame.grid(sticky='nsew')

        self.display_transition_levels_var = tk.BooleanVar(
            value=self.fpp.display_transition_levels)
        ttk.Checkbutton(self.fpp_param_frame,
                        text='Display Transition Levels',
                        variable=self.display_transition_levels_var,
                        onvalue=True,
                        offvalue=False).grid(row=0, column=1, sticky=W)

        self.display_charges_var = tk.BooleanVar(
            value=self.fpp.display_charges)
        ttk.Checkbutton(self.fpp_param_frame,
                        text='Display Charges',
                        variable=self.display_charges_var,
                        onvalue=True,
                        offvalue=False).grid(row=1, column=1, sticky=W)

        # ---------------------------------------------- DISPLAY PARAMS ------------------------------------------------

        self.display_param = tu.DisplayParametersFrame(self.main_frame,
                                                       'Position in the gap',
                                                       'Formation energy',
                                                       self.fpp)
        self.display_param.frame.grid(row=2, column=0, pady=3, sticky='nsew')

        # --------------------------------------------------- BUTTONS --------------------------------------------------

        buttons_frame = ttk.Frame(self.main_frame)
        buttons_frame.grid(row=3, column=0, pady=3, sticky='nsew')

        ttk.Button(buttons_frame, text='Apply',
                   command=self.save).grid(row=0, column=0, padx=5)
        ttk.Button(buttons_frame,
                   text='OK',
                   command=lambda: self.save(close=True)).grid(row=0,
                                                               column=1,
                                                               padx=5)
        ttk.Button(buttons_frame, text='Cancel',
                   command=self.destroy).grid(row=0, column=2, padx=5)
예제 #8
0
    def __init__(self, mainwindow, material_study):

        tk.Toplevel.__init__(self, mainwindow)
        self.resizable(False, False)

        self.mainwindow = mainwindow
        self.project = self.mainwindow.projects[
            self.mainwindow.currentprojectid]
        self.fpp = material_study.lastfpp

        self.main_frame = ttk.Frame(self)
        self.main_frame.pack(expand=True, fill='both')
        self.main_frame.grid_columnconfigure(0, weight=1)

        self.title(material_study.treetitle +
                   ' Defect Formation Energies Plot Parameters Edition Window')

        # --------------------------------------------------- FPP name -------------------------------------------------

        self.label0 = tk.Label(self.main_frame,
                               text='Plot Parameters Name',
                               pady=10)

        self.nameframe = tk.Frame(self.main_frame)
        self.nameframe.grid(row=1, column=0)
        namelist = [fpp.name for fpp in self.project.pp['fpp'].values()]
        self.fppname = ttk.Combobox(self.nameframe, values=namelist, width=40)
        self.fppname.set(self.fpp.name)
        self.fppname.bind("<<ComboboxSelected>>", self.fpp_select)
        self.label0.grid(row=0, column=0)
        self.fppname.grid(row=1, column=0)
        tk.Button(self.nameframe,
                  text='Save as new parameters',
                  command=self.fpp_create).grid(row=1, column=1)

        # ---------------------------------------------- FPP PARAMS ------------------------------------------------

        self.label0 = tk.Label(
            self.main_frame,
            text='Formation Energy Plot Specific Parameters',
            font='-weight bold')
        self.fpp_param_frame = ttk.LabelFrame(self.main_frame,
                                              labelwidget=self.label0)
        self.fpp_param_frame.grid(sticky='nsew')

        self.display_charges_var = tk.BooleanVar(
            value=self.fpp.display_charges)
        ttk.Checkbutton(self.fpp_param_frame,
                        text='Display Charges',
                        variable=self.display_charges_var,
                        onvalue=True,
                        offvalue=False).grid(row=0, column=1, sticky=W)

        self.highlight_charge_change_var = tk.BooleanVar(
            value=self.fpp.highlight_charge_change)
        ttk.Checkbutton(self.fpp_param_frame,
                        text='Highlight Charge Transition Levels',
                        variable=self.highlight_charge_change_var,
                        onvalue=True,
                        offvalue=False).grid(row=1, column=1, sticky=W)

        self.display_gaps_legend_var = tk.BooleanVar(
            value=self.fpp.display_gaps_legend)
        ttk.Checkbutton(self.fpp_param_frame,
                        text='Display Gap Legend',
                        variable=self.display_gaps_legend_var,
                        onvalue=True,
                        offvalue=False).grid(row=2, column=1, sticky=W)

        # ---------------------------------------------- DISPLAY PARAMS ------------------------------------------------

        self.display_param = tu.DisplayParametersFrame(self.main_frame,
                                                       'Position in the gap',
                                                       'Formation energy',
                                                       self.fpp)
        self.display_param.frame.grid(row=3, column=0, pady=3, sticky='nsew')

        # ---------------------------------------------- COLORS ------------------------------------------------
        self.label2 = tk.Label(self.main_frame,
                               text='Colors',
                               font='-weight bold')
        self.colors_pane = ttk.LabelFrame(self.main_frame,
                                          labelwidget=self.label2)
        self.colors = {}
        index = 0
        for def_stud in material_study.ds_list:
            self.colors[def_stud.ID] = tk.Button(
                self.colors_pane,
                text='\t\t',
                bg=self.fpp.colors[def_stud.ID],
                command=lambda port=def_stud.ID: self.set_color(port))
            self.colors[def_stud.ID].grid(row=index, column=0, sticky='w')
            tk.Label(self.colors_pane,
                     text=def_stud.treetitle).grid(row=index,
                                                   column=1,
                                                   sticky='w')
            index += 1

        self.colors_pane.grid(row=4, column=0, pady=3, sticky='nsew')

        # --------------------------------------------------- BUTTONS --------------------------------------------------

        buttons_frame = ttk.Frame(self.main_frame)
        buttons_frame.grid(row=5, column=0, pady=3, sticky='nsew')

        ttk.Button(buttons_frame, text='Apply',
                   command=self.save).grid(row=0, column=0, padx=5)
        ttk.Button(buttons_frame,
                   text='OK',
                   command=lambda: self.save(close=True)).grid(row=0,
                                                               column=1,
                                                               padx=5)
        ttk.Button(buttons_frame, text='Cancel',
                   command=self.destroy).grid(row=0, column=2, padx=5)