def __init__(self, spec, shutter, experiment, parent=None):
        super(DumbIrradiationExperiment_Gui, self).__init__(parent)
        #Load ui code
        uic.loadUi('DumbIrradiationExperimentGui.ui', self)

        #grabbing the current H5PY and intiating the data_browser
        self.data_file = nplab.current_datafile()
        self.data_file_tab = self.replace_widget(self.DataBrowser_tab_layout,
                                                 self.DataBrowser_widget,
                                                 self.data_file.get_qt_ui())

        #setup spectrometer tab gui and widget
        self.spectrometer = spec
        self.Spectrometer_widget = self.replace_widget(
            self.Spectrometer_Layout, self.Spectrometer_widget,
            self.spectrometer.get_qt_ui(display_only=True))
        self.spectrometer_tab = self.replace_widget(
            self.Spectrometer_tab_Layout, self.Spectrometer_tab_widget,
            self.spectrometer.get_qt_ui())

        #Setting up stepper and Lockin widget
        # Display
        self.Experiment = experiment
        self.Experiment_controls_widget = self.replace_widget(
            self.Main_layout, self.Experiment_controls_widget,
            self.Experiment.get_qt_ui())
        #Shutter control widget
        self.shutter = shutter
        self.StageControls_widget = self.replace_widget(
            self.Main_layout, self.shutter_controls_widget,
            self.shutter.get_qt_ui())
예제 #2
0
    def __init__(self, grid_scanner, parent=None):
        assert isinstance(grid_scanner, HyperspectralScan), \
            'scanner must be an instance of HyperspectralScan'
        super(HyperspectralScanUI, self).__init__()
        self.grid_scanner = grid_scanner
        uic.loadUi(
            os.path.join(os.path.dirname(__file__),
                         'hyperspectral_imaging.ui'), self)
        self.gridscanner_widget = self.replace_widget(
            self.main_layout, self.gridscanner_widget,
            GridScanQt.get_qt_ui_cls()(self.grid_scanner))
        self.gridscanner_widget.rate = 1. / 20.

        self.grid_scanner.fig = Figure()  # pg.GraphicsLayoutWidget()
        # self.grid_scanner.fig.scene().sigMouseClicked.connect(self.grid_scanner.on_mouse_click)
        self.figure_widget = self.replace_widget(
            self.main_layout, self.figure_widget,
            FigureCanvas(self.grid_scanner.fig))

        self.init_stage_select()
        self.init_view_wavelength_controls()
        self.init_view_select()

        self.scan_description.textChanged.connect(self.update_param)
        self.safe_exit.stateChanged.connect(self.on_state_change)

        self.config_stage.clicked.connect(self.on_click)
        self.config_spectrometers.clicked.connect(self.on_click)
        self.config_light_source.clicked.connect(self.on_click)
        self.open_browser.clicked.connect(self.on_click)
예제 #3
0
 def __init__(self, flipper, parent=None):
     assert isinstance(flipper, Flipper), 'instrument must be a flipper'
     self.flipper = flipper
     super(flipperUI, self).__init__(parent)
     uic.loadUi(os.path.join(os.path.dirname(__file__), 'flipper.ui'), self)
     self.auto_connect_by_name(controlled_object=self.flipper,
                               verbose=False)
예제 #4
0
    def __init__(self, smu, parent=None):
        super(SmuUI, self).__init__()
        self.smu = smu
        self.parent = parent
        uic.loadUi(os.path.join(os.path.dirname(__file__), 'smu.ui'), self)

        self.current_button.clicked.connect(self.state_changed)
        self.voltage_button.clicked.connect(self.state_changed)
        self.source_value.returnPressed.connect(self.set_parameter)
        self.source_range.returnPressed.connect(self.set_parameter)
        self.source_autorange.stateChanged.connect(self.state_changed)
        self.source_limit.returnPressed.connect(self.set_parameter)
        self.measurement_range.returnPressed.connect(self.set_parameter)
        self.measurement_autorange.stateChanged.connect(self.state_changed)
        self.measurement_limit.returnPressed.connect(self.set_parameter)
        self.measure_button.clicked.connect(self.measure_button_clicked)
        self.display_select.activated[str].connect(self.on_activated)
        self.output.stateChanged.connect(self.state_changed)

        self.voltage_button.setChecked(True)
        self.source_value.setText(str(self.smu.src_voltage))
        self.source_range.setText(str(self.smu.src_voltage_range))
        self.source_autorange.setChecked(bool(self.smu.src_voltage_autorange))
        self.source_limit.setText(str(self.smu.src_voltage_limit))
        self.measurement_range.setText(str(self.smu.meas_current_range))
        self.measurement_autorange.setChecked(
            bool(self.smu.meas_current_autorange))
        self.measurement_limit.setText(str(self.smu.src_current_limit))
        self.output.setChecked(False)
예제 #5
0
    def __init__(self, andor):
        assert isinstance(andor, Andor), "instrument must be an Andor"
        super(AndorUI, self).__init__()
        self.Andor = andor
        self.DisplayWidget = None
        self.temperature_display_thread = DisplayThread(self)
        uic.loadUi((os.path.dirname(__file__) + '/andor.ui'), self)

        self._setup_signals()
        self.init_gui()
        self.binning()
        self.data_file = None
        self.save_all_parameters = False

        self.gui_params = [
            'ReadMode', 'Exposure', 'AcquisitionMode', 'OutAmp', 'TriggerMode'
        ]
        self._func_dict = {}
        for param in self.gui_params:
            func = self.callback_to_update_prop(param)
            self._func_dict[param] = func
            register_for_property_changes(self.Andor, param,
                                          self._func_dict[param])
        if self.Andor.SingleTrack is not None:
            c_row, n_rows = self.Andor.SingleTrack
            self.spinBoxCenterRow.setValue(c_row)
            self.spinBoxNumRows.setValue(n_rows)
예제 #6
0
파일: ui_tools.py 프로젝트: caizikun/nplab
 def load_ui_from_file(self, current_file, filename):
     """Load a form from a Qt Designer file, into the current object.
     
     Usually current_file should just be __file__, if the ui file is located
     in the same directory as the python module you're writing.  Filename
     is the UI file."""
     uic.loadUi(os.path.join(os.path.dirname(current_file), filename), self)
예제 #7
0
    def __init__(self,
                 spectrometer,
                 ui_file=os.path.join(os.path.dirname(__file__),
                                      'spectrometer_controls.ui'),
                 parent=None):
        assert isinstance(spectrometer,
                          Spectrometer), "instrument must be a Spectrometer"
        super(SpectrometerControlUI, self).__init__()
        uic.loadUi(ui_file, self)
        self.spectrometer = spectrometer

        self.integration_time.setValidator(QtGui.QDoubleValidator())
        self.integration_time.textChanged.connect(self.check_state)
        self.integration_time.textChanged.connect(self.update_param)

        self.read_background_button.clicked.connect(self.button_pressed)
        self.read_reference_button.clicked.connect(self.button_pressed)
        self.clear_background_button.clicked.connect(self.button_pressed)
        self.clear_reference_button.clicked.connect(self.button_pressed)
        self.load_state_button.clicked.connect(self.button_pressed)

        self.background_subtracted.stateChanged.connect(self.state_changed)
        self.referenced.stateChanged.connect(self.state_changed)

        self.Absorption_checkBox.stateChanged.connect(self.state_changed)

        register_for_property_changes(self.spectrometer,
                                      'variable_int_enabled',
                                      self.variable_int_state_change)
        #        if self.spectrometer.variable_int_enabled:
        #                self.background_subtracted.blockSignals(True)
        #                self.background_subtracted.setCheckState(QtCore.Qt.Checked)
        #                self.background_subtracted.blockSignals(False)
        self.Variable_int.stateChanged.connect(self.state_changed)

        #                if self.spectrometer.variable_int_enabled:
        #                self.background_subtracted.blockSignals(True)
        #                self.background_subtracted.setCheckState(QtCore.Qt.Checked)
        #                self.background_subtracted.blockSignals(False)
        self.average_checkBox.stateChanged.connect(self.state_changed)
        self.Average_spinBox.valueChanged.connect(self.update_averages)

        self.referenceID_spinBox.valueChanged.connect(self.update_references)

        self.id_string.setText('{0} {1}'.format(
            self.spectrometer.model_name, self.spectrometer.serial_number))
        self.id_string.resize(self.id_string.sizeHint())

        self.integration_time.setText(str(spectrometer.integration_time))

        self.num_spectra_spinBox.valueChanged.connect(
            self.update_time_series_params)
        self.delay_doubleSpinBox.valueChanged.connect(
            self.update_time_series_params)
        self.time_series_name_lineEdit.textChanged.connect(
            self.update_time_series_name)
        self.time_series_pushButton.clicked.connect(self.time_series)
예제 #8
0
 def __init__(self, fw):
     super(FW212C_UI, self).__init__()
     self.fw = fw
     uic.loadUi(
         os.path.join(os.path.dirname(__file__), 'thorlabs_fw212c.ui'),
         self)
     for button in range(1, 13):  #1-12
         eval('self.radioButton_' + str(button) +
              '.clicked.connect(self.button_pressed)')
예제 #9
0
 def __init__(self, pm):
     super(PowerMeterUI, self).__init__()
     uic.loadUi(os.path.join(os.path.dirname(__file__), 'power_meter.ui'),
                self)
     self.pm = pm
     self.update_condition = threading.Condition()
     self.display_thread = DisplayThread(self)
     self.SetupSignals()
     register_for_property_changes(self.pm, 'live', self.live_changed)
예제 #10
0
    def __init__(self, triax):
        assert isinstance(triax, Triax), "instrument must be a Triax550"
        super(TriaxUI, self).__init__()
        uic.loadUi(os.path.join(os.path.dirname(__file__), 'Triax.ui'), self)

        self.lineEditTriaxWL.returnPressed.connect(self.txtChangedTriaxWL)
        self.lineEditSlitWidth.returnPressed.connect(self.txtChangedSlitWidth)
        self.pushButtonTriaxReset.clicked.connect(self.btnClickedTriaxReset)

        self.Triax = triax
        self.updateGUI()
예제 #11
0
 def __init__(self, mcs, parent=None):
     assert isinstance(mcs, SmaractMCS) or isinstance(mcs, SmaractMCSSerial) , "system must be a Smaract MCS"
     super(SmaractMCSUI, self).__init__()
     self.mcs = mcs
     uic.loadUi(os.path.join(os.path.dirname(__file__), 'smaract_mcs.ui'), self)
     self.mcs_id.setText(str(mcs.mcs_id))
     self.num_ch.setText(str(mcs.num_ch))
     self.reference_button.clicked.connect(self.mcs.find_references)
     self.calibrate_button.clicked.connect(self.mcs.calibrate_system)
     self.step_stage_widget = self.replace_widget(self.step_stage_layout, self.step_stage_widget, SmaractStageUI(self.mcs))
     self.scan_stage_widget = self.replace_widget(self.scan_stage_layout, self.scan_stage_widget, SmaractScanStageUI(self.mcs))
예제 #12
0
파일: OxfordITC.py 프로젝트: ivanalam/nplab
    def __init__(self, itc):
        assert isinstance(itc, OxfordITC), "instrument must be an Oxford ITC"
        super(OxfordITCUI, self).__init__()

        self.ITC = itc

        uic.loadUi(os.path.join(os.path.dirname(__file__), 'OxfordITC.ui'), self)

        self.lineEditSetT.returnPressed.connect(self.setT)

        self.updateGUI.connect(self.SentUpdateGUI)
        self.SentUpdateGUI()
예제 #13
0
파일: __init__.py 프로젝트: ivanalam/nplab
 def __init__(self, triax, ui_file =os.path.join(os.path.dirname(__file__),'triax_ui.ui'),  parent=None):
     assert isinstance(triax, Triax), "instrument must be a Triax"
     super(TriaxUI, self).__init__()
     uic.loadUi(ui_file, self)
     self.triax = triax
     self.centre_wl_lineEdit.returnPressed.connect(self.set_wl_gui)
     self.slit_lineEdit.returnPressed.connect(self.set_slit_gui)
     wl_arr = self.triax.Get_Wavelength_Array()      
     self.centre_wl_lineEdit.setText(str(np.around(wl_arr[len(wl_arr)//2])))
     self.slit_lineEdit.setText(str(self.triax.Slit()))
     eval('self.grating_'+str(self.triax.Grating())+'_radioButton.setChecked(True)')
     for radio_button in range(3):
         eval('self.grating_'+str(radio_button)+'_radioButton.clicked.connect(self.set_grating_gui)')
예제 #14
0
 def __init__(self, stage, parent=None, stage_step_min=1e-9, stage_step_max=1e-3, default_step=1e-6):
     assert isinstance(stage, Stage), "instrument must be a Stage"
     super(StageUI, self).__init__()
     self.stage = stage
     #self.setupUi(self)
     uic.loadUi(os.path.join(os.path.dirname(__file__), 'stage.ui'), self)
     self.step_size_values = step_size_dict(stage_step_min, stage_step_max,unit = self.stage.unit)
     self.step_size = [self.step_size_values[self.step_size_values.keys()[0]] for axis in stage.axis_names]
     self.create_axes_layout(default_step)
     self.update_ui[int].connect(self.update_positions)
     self.update_ui[str].connect(self.update_positions)
     self.update_pos_button.clicked.connect(partial(self.update_positions, None))
     self.update_positions()
예제 #15
0
    def __init__(self,
                 spectrometer,
                 ui_file=os.path.join(os.path.dirname(__file__),
                                      'spectrometer_view.ui'),
                 parent=None):
        assert isinstance(spectrometer, Spectrometer) or isinstance(spectrometer, Spectrometers),\
            "instrument must be a Spectrometer or an instance of Spectrometers"
        super(SpectrometerDisplayUI, self).__init__()
        uic.loadUi(ui_file, self)
        if isinstance(spectrometer,
                      Spectrometers) and spectrometer.num_spectrometers == 1:
            spectrometer = spectrometer.spectrometers[0]
        if isinstance(spectrometer, Spectrometer):
            spectrometer.num_spectrometers = 1
        self.spectrometer = spectrometer
        print(self.spectrometer)

        pg.setConfigOption('background', 'w')
        pg.setConfigOption('foreground', 'k')
        self.plotbox = QtWidgets.QGroupBox()
        self.plotbox.setLayout(QtWidgets.QGridLayout())
        self.plotlayout = self.plotbox.layout()
        self.plots = []

        for spectrometer_nom in range(self.spectrometer.num_spectrometers):
            self.plots.append(
                pg.PlotWidget(labels={'bottom': 'Wavelength (nm)'}))
            self.plotlayout.addWidget(self.plots[spectrometer_nom])

        self.figure_widget = self.replace_widget(self.display_layout,
                                                 self.figure_widget,
                                                 self.plotbox)
        self.take_spectrum_button.clicked.connect(self.button_pressed)
        self.live_button.clicked.connect(self.button_pressed)
        self.save_button.clicked.connect(self.button_pressed)
        self.threshold.setValidator(QtGui.QDoubleValidator())
        self.threshold.textChanged.connect(self.check_state)
        self._display_thread = DisplayThread(self)
        self._display_thread.spectrum_ready.connect(self.update_display)
        self._display_thread.spectra_ready.connect(self.update_display)

        self.period = 0.2
        self.filename_lineEdit.textChanged.connect(self.filename_changed_ui)

        register_for_property_changes(self.spectrometer, 'filename',
                                      self.filename_changed)
예제 #16
0
    def __init__(self, stepper):
        super(Stepper_Ui, self).__init__()
        #  assert(stepper==Stepper) # checking if the object is a stepper
        self.stepper = stepper
        ui_file = os.path.join(
            os.path.dirname(__file__), 'stepper_GUI.ui'
        )  # GUI path . e.g. look into location of the current file and search for the given name
        uic.loadUi(ui_file, self)  #loading the ui file

        self.move_spinBox.setMaximum(int(self.stepper.max_steps))
        self.move_percent_doubleSpinBox.setMaximum(100.0)

        self.current_button.clicked.connect(self.update_positions)

        self.setpercent_pushButton.clicked.connect(self.move_to_percent)
        self.setsteps_pushButton.clicked.connect(self.move_to)
        self.update_positions()
예제 #17
0
파일: __init__.py 프로젝트: ivanalam/nplab
    def __init__(self, streak):
        super(StreakUI, self).__init__()

        self.Streak = streak
        uic.loadUi((os.path.dirname(__file__) + '/Streak.ui'), self)

        self.comboBoxGateMode.activated.connect(self.gate_mode)
        self.comboBoxReadMode.activated.connect(self.read_mode)
        self.comboBoxShutter.activated.connect(self.shutter)
        self.comboBoxTrigMode.activated.connect(self.trigger)
        self.spinBox_MCPGain.valueChanged.connect(self.mcp_gain)
        self.lineEditTimeRange.returnPressed.connect(self.time_range)
        self.comboBoxTimeUnit.activated.connect(self.time_range)
        self.pushButtonLess.clicked.connect(lambda: self.time_range('-'))
        self.pushButtonMore.clicked.connect(lambda: self.time_range('+'))

        self.pushButtonCapture.clicked.connect(
            lambda: self.Streak.raw_image(update_latest_frame=True))
예제 #18
0
파일: __init__.py 프로젝트: ivanalam/nplab
    def __init__(self, light_source, parent=None):
        assert isinstance(light_source,
                          LightSource), 'instrument must be a LightSource'
        self.light_source = light_source
        super(LightSourceUI, self).__init__(parent)
        uic.loadUi(os.path.join(os.path.dirname(__file__), 'light_source.ui'),
                   self)
        self.control_group.setTitle(self.light_source.__class__.__name__)
        self.power.setValidator(QtGui.QDoubleValidator())
        self.power.textChanged.connect(self.check_state)
        self.power.returnPressed.connect(self.update_param)
        self.power_slider.setRange(self.light_source.min_power,
                                   self.light_source.max_power)
        self.power_slider.valueChanged[int].connect(self.update_param)
        self.power_slider.sliderReleased.connect(self.update_param)
        self.set_power_button.clicked.connect(self.on_click)

        if self.light_source.shutter is not None:
            self.control_layout.addWidget(
                self.light_source.shutter.get_qt_ui())
예제 #19
0
파일: __init__.py 프로젝트: ww334/nplab
    def __init__(self, solstis):
        assert isinstance(solstis, SolsTiS), "instrument must be a SolsTiS"
        super(SolsTiSUI, self).__init__()

        self.SolsTiS = solstis
        self.signal = QtCore.SIGNAL('SolsTiSGUIupdate')
        self.SolsTiSMonitorThread = None

        uic.loadUi(os.path.join(os.path.dirname(__file__), 'SolsTiS.ui'), self)

        self.checkBoxSolsTiSLockMonitor.stateChanged.connect(
            self.SolsTiSLockMonitor)
        self.checkBoxSolsTiSEtalonLock.stateChanged.connect(
            self.SolsTiSLockEtalon)
        self.checkBoxSolsTiSCavityLock.stateChanged.connect(
            self.SolsTiSLockCavity)
        self.lineEditSolsTiSWL.returnPressed.connect(self.SolsTiSWL)
        self.pushButtonSolsTiSstatusMonitor.clicked.connect(
            self.SolsTiSMonitor)
        self.pushButtonSolsTiSstopMonitor.clicked.connect(
            self.SolsTiSMonitorStop)
예제 #20
0
파일: __init__.py 프로젝트: ivanalam/nplab
    def setup_gui(self):
        """Creates a DockArea and fills it with the Slm.options given

        For each option, it extracts the correct ui from gui by name, loads it into a widget and adds it to the DockArea

        :return:
        """
        uic.loadUi(os.path.join(os.path.dirname(__file__), 'ui_base.ui'), self)
        self.dockarea = dockarea.DockArea()
        self.splitter.insertWidget(0, self.dockarea)
        self.dockarea.show()  # Absolutely no idea why this is needed

        self.all_widgets = dict()
        self.all_docks = []
        for option in self.SLM.options:
            widget = getattr(gui, '%sUi' % option)(self)
            dock = dockarea.Dock(option)
            dock.addWidget(widget)
            self.dockarea.addDock(dock, 'bottom')
            self.all_widgets[option] = widget
            self.all_docks += [dock]
        self.make_pushButton.pressed.connect(self.make)
예제 #21
0
    def create_axes_layout(self,
                           default_step=1e-6,
                           stack_multiple_stages='horizontal'):

        uic.loadUi(os.path.join(os.path.dirname(__file__), 'stage.ui'), self)
        self.update_pos_button.clicked.connect(
            partial(self.update_positions, None))
        path = os.path.dirname(os.path.realpath(nplab.ui.__file__))
        icon_size = QtCore.QSize(12, 12)
        self.positions = []
        self.set_positions = []
        self.set_position_buttons = []
        for i, ax in enumerate(self.stage.axis_names):
            col = 4 * (i / 3)
            position = QtWidgets.QLineEdit('', self)
            position.setReadOnly(True)
            self.positions.append(position)
            set_position = QtWidgets.QLineEdit('0', self)
            set_position.setMinimumWidth(40)
            self.set_positions.append(set_position)
            set_position_button = QtWidgets.QPushButton('', self)
            set_position_button.setIcon(
                QtGui.QIcon(os.path.join(path, 'go.png')))
            set_position_button.setIconSize(icon_size)
            set_position_button.resize(icon_size)
            set_position_button.clicked.connect(self.button_pressed)
            self.set_position_buttons.append(set_position_button)
            # for each stage axis add a label, a field for the current position,
            # a field to set a new position and a button to set a new position ..
            self.info_layout.addWidget(QtWidgets.QLabel(str(ax), self), i % 3,
                                       col)
            self.info_layout.addWidget(position, i % 3, col + 1)
            self.info_layout.addWidget(set_position, i % 3, col + 2)
            self.info_layout.addWidget(set_position_button, i % 3, col + 3)

            if i % 3 == 0:
                group = QtWidgets.QGroupBox('axes {0}'.format(1 + (i / 3)),
                                            self)
                layout = QtWidgets.QGridLayout()
                layout.setSpacing(3)
                group.setLayout(layout)
                self.axes_layout.addWidget(group, 0, i / 3)
                zero_button = QtWidgets.QPushButton('', self)
                zero_button.setIcon(QtGui.QIcon(os.path.join(path,
                                                             'zero.png')))
                zero_button.setIconSize(icon_size)
                zero_button.resize(icon_size)
                n = len(self.stage.axis_names) - i if len(
                    self.stage.axis_names) - i < 3 else 3
                axes_set = self.stage.axis_names[i:i + n]
                #                zero_button.clicked.connect(partial(self.zero_all_axes, axes_set))
                layout.addWidget(zero_button, 1, 1)

            step_size_select = QtWidgets.QComboBox(self)
            step_size_select.addItems(self.step_size_values.keys())
            step_size_select.activated[str].connect(
                partial(self.on_activated, i))
            step_str = engineering_format(default_step, self.stage.unit)
            step_index = self.step_size_values.keys().index(step_str)
            step_size_select.setCurrentIndex(step_index)
            layout.addWidget(QtWidgets.QLabel(str(ax), self), i % 3, 5)
            layout.addWidget(step_size_select, i % 3, 6)
            if i % 3 == 0:
                layout.addItem(QtWidgets.QSpacerItem(12, 0), 0, 4)

            plus_button = QtWidgets.QPushButton('', self)
            plus_button.clicked.connect(
                partial(self.move_axis_relative, i, ax, 1))
            minus_button = QtWidgets.QPushButton('', self)
            minus_button.clicked.connect(
                partial(self.move_axis_relative, i, ax, -1))
            if i % 3 == 0:
                plus_button.setIcon(
                    QtGui.QIcon(os.path.join(path, 'right.png')))
                minus_button.setIcon(
                    QtGui.QIcon(os.path.join(path, 'left.png')))
                layout.addWidget(minus_button, 1, 0)
                layout.addWidget(plus_button, 1, 2)
            elif i % 3 == 1:
                plus_button.setIcon(QtGui.QIcon(os.path.join(path, 'up.png')))
                minus_button.setIcon(
                    QtGui.QIcon(os.path.join(path, 'down.png')))
                layout.addWidget(plus_button, 0, 1)
                layout.addWidget(minus_button, 2, 1)
            elif i % 3 == 2:
                plus_button.setIcon(QtGui.QIcon(os.path.join(path, 'up.png')))
                minus_button.setIcon(
                    QtGui.QIcon(os.path.join(path, 'down.png')))
                layout.addWidget(plus_button, 0, 3)
                layout.addWidget(minus_button, 2, 3)
            plus_button.setIconSize(icon_size)
            plus_button.resize(icon_size)
            minus_button.setIconSize(icon_size)
            minus_button.resize(icon_size)
예제 #22
0
파일: gui.py 프로젝트: ivanalam/nplab
 def __init__(self, slm_gui, name):
     super(BaseUi, self).__init__()
     uic.loadUi(os.path.join(os.path.dirname(__file__), 'ui_%s.ui' % name),
                self)
     self.slm_gui = slm_gui
     self._connect()
예제 #23
0
    def __init__(self,
                 instrument_dict,
                 parent=None,
                 dock_settings_path=None,
                 scripts_path=None,
                 working_directory=None):
        super(GuiGenerator, self).__init__(parent)
        self._logger = LOGGER
        self.instr_dict = instrument_dict
        if working_directory == None:
            self.working_directory = os.path.join(os.getcwd())
        else:
            self.working_directory = working_directory
        self.data_file = df.current(working_directory=working_directory)
        self.instr_dict['HDF5'] = self.data_file
        self.setDockNestingEnabled(1)

        uic.loadUi(os.path.join(os.path.dirname(__file__), 'guigenerator.ui'),
                   self)

        self.allDocks = {}
        self.allWidgets = {}
        self.actions = dict(Views={}, Instruments={})

        self.dockwidgetArea = pyqtgraph.dockarea.DockArea()
        self.dockWidgetArea = self.replace_widget(self.verticalLayout,
                                                  self.centralWidget(),
                                                  self.dockwidgetArea)
        self.dockWidgetAllInstruments.setWidget(self.dockwidgetArea)
        self.dockWidgetAllInstruments.setTitleBarWidget(
            QtWidgets.QWidget())  # This trick makes the title bar disappear

        # Iterate over all the opened instruments. If the instrument has a GUI (i.e. if they have the get_qt_ui function
        # defined inside them), then create a pyqtgraph.Dock for it and add its widget to the Dock. Also prints out any
        # instruments that do not have GUIs
        self._logger.info('Opening all GUIs')

        for instr in self.instr_dict:
            self._open_one_gui(instr)

        self.terminalWindow = None
        self.menuTerminal()
        self._addActionViewMenu('Terminal')

        self.script_menu = None
        if scripts_path is not None:
            self.scripts_path = scripts_path
        else:
            self.scripts_path = 'scripts'
        self.makeScriptMenu()

        self.NightMode = 1

        # address of h5 file
        self.filename = df.current().filename

        #        self._tabifyAll()
        self._setupSignals()
        if dock_settings_path is not None:
            self.dock_settings_path = dock_settings_path
            self.menuLoadSettings()
        else:
            self.dock_settings_path = None
        self.showMaximized()
예제 #24
0
파일: __init__.py 프로젝트: ivanalam/nplab
    def create_axes_layout(self,
                           default_step=1e-8,
                           stack_multiple_stages='horizontal'):
        uic.loadUi(os.path.join(os.path.dirname(__file__), 'piezo_stage.ui'),
                   self)
        path = os.path.dirname(os.path.realpath(nplab.ui.__file__))
        icon_size = QtCore.QSize(12, 12)
        self.position_widgets = []
        self.xy_positions = []
        self.set_positions = []
        self.set_position_buttons = []
        for i, ax in enumerate(self.stage.axis_names):
            col = 4 * (old_div(i, 3))
            if i % 3 == 0:
                # absolute position for different stages consisting of 3 axes
                position_widget = XYZPositionWidget(
                    self.stage.max_voltage_levels[old_div(i, 3)],
                    self.stage.max_voltage_levels[old_div(i, 3) + 1],
                    self.stage.max_voltage_levels[old_div(i, 3) + 2],
                    show_xy_pos=self.show_xy_pos,
                    show_z_pos=self.show_z_pos)
                if self.show_xy_pos:
                    xy_position = position_widget.xy_widget.crosshair
                    xy_position.CrossHairMoved.connect(self.crosshair_moved)
                    self.xy_positions.append(xy_position)

                self.position_widgets.append(position_widget)

                self.info_layout.addWidget(position_widget, 0, col, 3, 1)

                # position control elements for different stages consisting of 3 axes, arranged in a grid layout
                group = QtWidgets.QGroupBox(
                    'stage {0}'.format(1 + (old_div(i, 3))), self)
                layout = QtWidgets.QGridLayout()
                layout.setSpacing(3)
                group.setLayout(layout)
                self.axes_layout.addWidget(group, 0, old_div(i, 3))
                zero_button = QtWidgets.QPushButton('', self)
                zero_button.setIcon(QtGui.QIcon(os.path.join(path,
                                                             'zero.png')))
                zero_button.setIconSize(icon_size)
                zero_button.resize(icon_size)
                n = len(self.stage.axis_names) - i if len(
                    self.stage.axis_names) - i < 3 else 3
                #axes_set = self.stage.axis_names[i:i + n]
                #zero_button.clicked.connect(partial(self.zero_all_axes, axes_set))
                layout.addWidget(zero_button, 1, 1)

            set_position = QtWidgets.QLineEdit(
                '0', self)  # text field to set position
            set_position.setMinimumWidth(40)
            set_position.setReadOnly(True)
            self.set_positions.append(set_position)
            set_position_button = QtWidgets.QPushButton('', self)
            set_position_button.setIcon(
                QtGui.QIcon(os.path.join(path, 'go.png')))
            set_position_button.setIconSize(icon_size)
            set_position_button.resize(icon_size)
            set_position_button.clicked.connect(self.button_pressed)
            self.set_position_buttons.append(set_position_button)
            # for each stage axis add a label, a field for the current position,
            # a field to set a new position and a button to set a new position ..
            self.info_layout.addWidget(QtWidgets.QLabel(str(ax), self), i % 3,
                                       col + 1)
            self.info_layout.addWidget(set_position, i % 3, col + 2)
            self.info_layout.addWidget(set_position_button, i % 3, col + 3)

            step_size_select = QtWidgets.QComboBox(self)
            step_size_select.addItems(list(self.step_size_values.keys()))
            step_size_select.activated[str].connect(
                partial(self.on_activated, i))
            step_str = engineering_format(default_step, self.stage.unit)
            step_index = list(self.step_size_values.keys()).index(step_str)
            step_size_select.setCurrentIndex(step_index)
            layout.addWidget(QtWidgets.QLabel(str(ax), self), i % 3, 5)
            layout.addWidget(step_size_select, i % 3, 6)
            if i % 3 == 0:
                layout.addItem(QtWidgets.QSpacerItem(12, 0), 0, 4)

            plus_button = QtWidgets.QPushButton('', self)
            plus_button.clicked.connect(
                partial(self.move_axis_relative, i, ax, 1))
            minus_button = QtWidgets.QPushButton('', self)
            minus_button.clicked.connect(
                partial(self.move_axis_relative, i, ax, -1))
            if i % 3 == 0:
                plus_button.setIcon(
                    QtGui.QIcon(os.path.join(path, 'right.png')))
                minus_button.setIcon(
                    QtGui.QIcon(os.path.join(path, 'left.png')))
                layout.addWidget(minus_button, 1, 0)
                layout.addWidget(plus_button, 1, 2)
            elif i % 3 == 1:
                plus_button.setIcon(QtGui.QIcon(os.path.join(path, 'up.png')))
                minus_button.setIcon(
                    QtGui.QIcon(os.path.join(path, 'down.png')))
                layout.addWidget(plus_button, 0, 1)
                layout.addWidget(minus_button, 2, 1)
            elif i % 3 == 2:
                plus_button.setIcon(QtGui.QIcon(os.path.join(path, 'up.png')))
                minus_button.setIcon(
                    QtGui.QIcon(os.path.join(path, 'down.png')))
                layout.addWidget(plus_button, 0, 3)
                layout.addWidget(minus_button, 2, 3)
            plus_button.setIconSize(icon_size)
            plus_button.resize(icon_size)
            minus_button.setIconSize(icon_size)
            minus_button.resize(icon_size)
예제 #25
0
파일: __init__.py 프로젝트: ivanalam/nplab
    def create_axes_layout(self,
                           default_step=1e-6,
                           arrange_buttons='cross',
                           rows=None):
        """Layout of the PyQt widgets for absolute and relative movement of all axis

        :param default_step:
        :param arrange_buttons: either 'cross' or 'stack'. If 'cross', assumes the stages axes are x,y,z movement,
        placing the arrows in an intuitive cross pattern
        :param rows: number of rows per column when distributing the QtWidgets
        :return:
        """
        if rows is None:
            rows = np.ceil(np.sqrt(len(self.stage.axis_names)))
        rows = int(
            rows)  # int is needed for the old_div and the modulo operations

        uic.loadUi(os.path.join(os.path.dirname(__file__), 'stage.ui'), self)
        self.update_pos_button.clicked.connect(
            partial(self.update_positions, None))
        path = os.path.dirname(os.path.realpath(nplab.ui.__file__))
        icon_size = QtCore.QSize(12, 12)
        self.positions = []
        self.set_positions = []
        self.set_position_buttons = []
        for i, ax in enumerate(self.stage.axis_names):
            col = 4 * (old_div(i, rows))
            position = QtWidgets.QLineEdit('', self)
            position.setReadOnly(True)
            self.positions.append(position)
            set_position = QtWidgets.QLineEdit('0', self)
            set_position.setMinimumWidth(40)
            self.set_positions.append(set_position)
            set_position_button = QtWidgets.QPushButton('', self)
            set_position_button.setIcon(
                QtGui.QIcon(os.path.join(path, 'go.png')))
            set_position_button.setIconSize(icon_size)
            set_position_button.resize(icon_size)
            set_position_button.clicked.connect(self.button_pressed)
            self.set_position_buttons.append(set_position_button)
            # for each stage axis add a label, a field for the current position,
            # a field to set a new position and a button to set a new position ..
            self.info_layout.addWidget(QtWidgets.QLabel(str(ax), self),
                                       i % rows, col)
            self.info_layout.addWidget(position, i % rows, col + 1)
            self.info_layout.addWidget(set_position, i % rows, col + 2)
            self.info_layout.addWidget(set_position_button, i % rows, col + 3)

            if i % rows == 0:
                if arrange_buttons == 'cross':
                    group = QtWidgets.QGroupBox(
                        'axes {0}'.format(1 + (old_div(i, rows))), self)
                    layout = QtWidgets.QGridLayout()
                    layout.setSpacing(3)
                    group.setLayout(layout)
                    self.axes_layout.addWidget(group, 0, old_div(i, rows))
                    offset = 0
                elif arrange_buttons == 'stack':
                    layout = self.axes_layout
                    offset = 7 * old_div(i, rows)
                else:
                    raise ValueError('Unrecognised arrangment: %s' %
                                     arrange_buttons)

            step_size_select = QtWidgets.QComboBox(self)
            step_size_select.addItems(list(self.step_size_values.keys()))
            step_size_select.activated[str].connect(
                partial(self.on_activated, i))
            step_str = engineering_format(default_step, self.stage.unit)
            step_index = list(self.step_size_values.keys()).index(step_str)
            step_size_select.setCurrentIndex(step_index)
            layout.addWidget(QtWidgets.QLabel(str(ax), self), i % rows,
                             5 + offset)
            layout.addWidget(step_size_select, i % rows, 6 + offset)
            if i % 3 == 0 and arrange_buttons == 'cross':
                layout.addItem(QtWidgets.QSpacerItem(12, 0), 0, 4)

            plus_button = QtWidgets.QPushButton('', self)
            plus_button.clicked.connect(
                partial(self.move_axis_relative, i, ax, 1))
            minus_button = QtWidgets.QPushButton('', self)
            minus_button.clicked.connect(
                partial(self.move_axis_relative, i, ax, -1))
            if arrange_buttons == 'cross':
                if i % rows == 0:
                    plus_button.setIcon(
                        QtGui.QIcon(os.path.join(path, 'right.png')))
                    minus_button.setIcon(
                        QtGui.QIcon(os.path.join(path, 'left.png')))
                    layout.addWidget(minus_button, 1, 0)
                    layout.addWidget(plus_button, 1, 2)
                elif i % rows == 1:
                    plus_button.setIcon(
                        QtGui.QIcon(os.path.join(path, 'up.png')))
                    minus_button.setIcon(
                        QtGui.QIcon(os.path.join(path, 'down.png')))
                    layout.addWidget(plus_button, 0, 1)
                    layout.addWidget(minus_button, 2, 1)
                elif i % rows == 2:
                    plus_button.setIcon(
                        QtGui.QIcon(os.path.join(path, 'up.png')))
                    minus_button.setIcon(
                        QtGui.QIcon(os.path.join(path, 'down.png')))
                    layout.addWidget(plus_button, 0, 3)
                    layout.addWidget(minus_button, 2, 3)
            elif arrange_buttons == 'stack':
                plus_button.setIcon(
                    QtGui.QIcon(os.path.join(path, 'right.png')))
                minus_button.setIcon(
                    QtGui.QIcon(os.path.join(path, 'left.png')))
                layout.addWidget(minus_button, i % rows, 0 + offset)
                layout.addWidget(plus_button, i % rows, 1 + offset)
            else:
                raise ValueError('Unrecognised arrangment: %s' %
                                 arrange_buttons)
            plus_button.setIconSize(icon_size)
            plus_button.resize(icon_size)
            minus_button.setIconSize(icon_size)
            minus_button.resize(icon_size)
예제 #26
0
    def __init__(self,
                 instrument_dict,
                 parent=None,
                 dock_settings_path=None,
                 scripts_path=None,
                 working_directory=None):  #
        """Args:
            instrument_dict(dict) :     This is a dictionary containg the 
                                        instruments objects where the key is the 
                                        objects new name in the generated new Ipython 
                                        console
            dock_settings_path(str):    A path for loading a previous dock widget
                                        configuration
            script_path(str):           The path of any scripts the user may want to
                                        run using the drop down menu at the top
                                        of the gui
            working_directory(str):     A path to the requested working directory - 
                                        handy if you always wish to save data to 
                                        the same directorys
                                """
        super(GuiGenerator, self).__init__(parent)
        self._logger = LOGGER
        self.instr_dict = instrument_dict
        if working_directory == None:
            self.working_directory = os.path.join(os.getcwd())
        else:
            self.working_directory = working_directory
        self.data_file = df.current(working_directory=working_directory)
        self.instr_dict['HDF5'] = self.data_file
        self.setDockNestingEnabled(1)

        uic.loadUi(os.path.join(os.path.dirname(__file__), 'guigenerator.ui'),
                   self)

        self.allDocks = {}
        self.allWidgets = {}
        self.actions = dict(Views={}, Instruments={})

        self.dockwidgetArea = pyqtgraph.dockarea.DockArea()
        self.dockWidgetArea = self.replace_widget(self.verticalLayout,
                                                  self.centralWidget(),
                                                  self.dockwidgetArea)
        self.dockWidgetAllInstruments.setWidget(self.dockwidgetArea)
        self.dockWidgetAllInstruments.setTitleBarWidget(
            QtWidgets.QWidget())  # This trick makes the title bar disappear

        # Iterate over all the opened instruments. If the instrument has a GUI (i.e. if they have the get_qt_ui function
        # defined inside them), then create a pyqtgraph.Dock for it and add its widget to the Dock. Also prints out any
        # instruments that do not have GUIs
        self._logger.info('Opening all GUIs')

        for instr in self.instr_dict:
            self._open_one_gui(instr)

        self.terminalWindow = None
        self.menuTerminal()
        self._addActionViewMenu('Terminal')

        self.script_menu = None
        if scripts_path is not None:
            self.scripts_path = scripts_path
        else:
            self.scripts_path = 'scripts'
        self.makeScriptMenu()

        self.NightMode = 1

        # address of h5 file
        self.filename = df.current().filename

        #        self._tabifyAll()
        self._setupSignals()
        if dock_settings_path is not None:
            self.dock_settings_path = dock_settings_path
            self.menuLoadSettings()
        else:
            self.dock_settings_path = None
        self.showMaximized()