def __init__(self, pid_controller): super().__init__(pid_controller) self.running = False self.det_done_flag = False self.move_done_flag = False self.timeout_scan_flag = False self.curr_time = time.perf_counter() self.lsqe = LSqEllipse() self.phases = np.zeros((100, )) self.curr_phase = 0 self.curr_position = 0 self.dock_calib = Dock('Calibration') widget_calib = QtWidgets.QWidget() self.viewer_calib = Viewer1D(widget_calib) widget_ellipse = QtWidgets.QWidget() self.viewer_ellipse = Viewer1D(widget_ellipse) self.viewer_ellipse.show_data([np.zeros((10, )), np.zeros((10, ))]) self.dock_calib.addWidget(widget_calib) self.dock_calib.addWidget(widget_ellipse, row=0, col=1) self.pid_controller.dock_area.addDock(self.dock_calib) self.dock_calib.float() self.timer = QTimer() self.timer.setSingleShot(True) self.timer.timeout.connect(self.timeout)
def setupUI(self): horlayout = QtWidgets.QHBoxLayout() splitter = QtWidgets.QSplitter(Qt.Horizontal) self.setLayout(horlayout) horlayout.addWidget(splitter) tab = QtWidgets.QTabWidget() form = QtWidgets.QWidget() self.viewer_data = Viewer1D(form) self.plot_peak_item = self.viewer_data.viewer.plotwidget.plot() form1 = QtWidgets.QWidget() self.viewer_calib = Viewer1D(form1) self.viewer_calib.set_axis_label(axis_settings=dict( orientation='left', label='Photon wavelength', units='nm')) tab.addTab(form, 'Data Viewer') tab.addTab(form1, 'Calibration') splitter.addWidget(tab) self.settings = Parameter.create(name='settings', type='group', children=self.params) self.settings.sigTreeStateChanged.connect(self.parameter_tree_changed) self.settings_tree = ParameterTree() self.settings_tree.setMinimumWidth(300) self.settings_tree.setParameters(self.settings, showTop=False) splitter.addWidget(self.settings_tree) # creating a toolbar self.toolbar = QtWidgets.QToolBar() self.create_toolbar() self.window.addToolBar(self.toolbar)
def setup_spread_UI(self): self.ui.spread_widget = QtWidgets.QWidget() self.ui.spread_widget.setLayout(QtWidgets.QVBoxLayout()) widget1D = QtWidgets.QWidget() widget2D = QtWidgets.QWidget() self.ui.spread_viewer_1D = Viewer1D(widget1D) self.ui.spread_viewer_2D = Viewer2D(widget2D) self.ui.spread_widget.layout().addWidget(widget1D) self.ui.spread_widget.layout().addWidget(widget2D) # todo: better connection as discussed self.ui.spread_viewer_1D.ui.crosshair.crosshair_dragged.connect(self.get_nav_position) self.ui.spread_viewer_1D.ui.crosshair_pb.click() self.ui.spread_viewer_2D.ui.auto_levels_pb.click() #todo: better connection as discussed self.ui.spread_viewer_2D.crosshair_dragged.connect(self.get_nav_position) self.ui.spread_viewer_2D.ui.crosshair_pb.click() self.ui.spread_widget.show() self.ui.spread_widget.setVisible(False)
def set_GUI(self): """ """ #%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% #main_layout = QtWidgets.QGridLayout() #self.area.setLayout(main_layout) #vsplitter = QtWidgets.QSplitter(Qt.Vertical) # Hsplitter=QtWidgets.QSplitter(Qt.Horizontal) params = [ {'title': 'set data:', 'name': 'set_data_4D', 'type': 'action', 'visible': False}, {'title': 'set data:', 'name': 'set_data_3D', 'type': 'action', 'visible': False}, {'title': 'set data:', 'name': 'set_data_2D', 'type': 'action', 'visible': False}, {'title': 'set data:', 'name': 'set_data_1D', 'type': 'action', 'visible': False}, {'title': 'Signal shape', 'name': 'data_shape_settings', 'type': 'group', 'children': [ {'title': 'Initial Data shape:', 'name': 'data_shape_init', 'type': 'str', 'value': "", 'readonly': True}, {'title': 'Axes shape:', 'name': 'nav_axes_shapes', 'type': 'group', 'children': [], 'readonly': True}, {'title': 'Data shape:', 'name': 'data_shape', 'type': 'str', 'value': "", 'readonly': True}, {'title': 'Navigator axes:', 'name': 'navigator_axes', 'type': 'itemselect'}, {'title': 'Set Nav axes:', 'name': 'set_nav_axes', 'type': 'action', 'visible': True}, ]}, ] self.settings = Parameter.create(name='Param', type='group', children=params) ##self.signal_axes_selection() # connecting from tree self.settings.sigTreeStateChanged.connect(self.parameter_tree_changed) # any changes on the settings self.settings.child(('set_data_1D')).sigActivated.connect(lambda: self.set_data_test('1D')) self.settings.child(('set_data_2D')).sigActivated.connect(lambda: self.set_data_test('2D')) self.settings.child(('set_data_3D')).sigActivated.connect(lambda: self.set_data_test('3D')) self.settings.child(('set_data_4D')).sigActivated.connect(lambda: self.set_data_test('4D')) self.settings.child('data_shape_settings', 'set_nav_axes').sigActivated.connect(self.update_data) ##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ##% 1D signalviewer viewer1D_widget = QtWidgets.QWidget() self.ui.viewer1D = Viewer1D(viewer1D_widget) self.ROI1D = LinearRegionItem() self.ui.viewer1D.viewer.plotwidget.plotItem.addItem(self.ROI1D) self.ui.combomath = QtWidgets.QComboBox() self.ui.combomath.addItems(['Sum', 'Mean', 'Half-life']) self.ui.viewer1D.ui.button_widget.layout().insertWidget(4, self.ui.combomath) self.ui.combomath.currentIndexChanged.connect(self.update_Navigator) self.ROI1D.sigRegionChangeFinished.connect(self.update_Navigator) # % 2D viewer Dock viewer2D_widget = QtWidgets.QWidget() self.ui.viewer2D = Viewer2D(viewer2D_widget) self.ui.viewer2D.ui.Ini_plot_pb.setVisible(False) self.ui.viewer2D.ui.FlipUD_pb.setVisible(False) self.ui.viewer2D.ui.FlipLR_pb.setVisible(False) self.ui.viewer2D.ui.rotate_pb.setVisible(False) self.ui.viewer2D.ui.auto_levels_pb.click() self.ui.viewer2D.ui.ROIselect_pb.click() self.ROI2D = self.ui.viewer2D.ui.ROIselect self.ui.viewer2D.ROI_select_signal.connect(self.update_Navigator) dock_signal = Dock('Signal') dock_signal.addWidget(viewer1D_widget) dock_signal.addWidget(viewer2D_widget) ##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ##% Navigator viewer Dock navigator1D_widget = QtWidgets.QWidget() self.ui.navigator1D = Viewer1D(navigator1D_widget) self.ui.navigator1D.ui.crosshair.crosshair_dragged.connect(self.update_viewer_data) self.ui.navigator1D.ui.crosshair_pb.click() self.ui.navigator1D.data_to_export_signal.connect(self.export_data) navigator2D_widget = QtWidgets.QWidget() self.ui.navigator2D = Viewer2D(navigator2D_widget) self.ui.navigator2D.ui.auto_levels_pb.click() self.ui.navigator2D.crosshair_dragged.connect( self.update_viewer_data) # export scaled position in conjonction with 2D scaled axes self.ui.navigator2D.ui.crosshair_pb.click() self.ui.navigator2D.data_to_export_signal.connect(self.export_data) self.ui.navigation_widget = QtWidgets.QWidget() # vlayout_navigation = QtWidgets.QVBoxLayout() # self.navigator_label = QtWidgets.QLabel('Navigation View') # self.navigator_label.setMaximumHeight(15) #layout_navigation.addWidget(self.navigator_label) self.ui.nav_axes_widget = QtWidgets.QWidget() self.ui.nav_axes_widget.setLayout(QtWidgets.QVBoxLayout()) #vlayout_navigation.addWidget(navigator2D_widget) #vlayout_navigation.addWidget(self.ui.nav_axes_widget) self.ui.nav_axes_widget.setVisible(False) #vlayout_navigation.addWidget(navigator1D_widget) #self.ui.navigation_widget.setLayout(vlayout_navigation) #vsplitter.insertWidget(0, self.ui.navigation_widget) dock_navigation = Dock('Navigation') dock_navigation.addWidget(navigator1D_widget) dock_navigation.addWidget(navigator2D_widget) self.area.addDock(dock_navigation) self.area.addDock(dock_signal, 'right', dock_navigation) # self.ui.signal_widget = QtWidgets.QWidget() # VLayout1 = QtWidgets.QVBoxLayout() # self.viewer_label = QtWidgets.QLabel('Data View') # self.viewer_label.setMaximumHeight(15) # VLayout1.addWidget(self.viewer_label) # VLayout1.addWidget(viewer1D_widget) # VLayout1.addWidget(viewer2D_widget) # self.ui.signal_widget.setLayout(VLayout1) #vsplitter.insertWidget(1, self.ui.signal_widget) icon = QtGui.QIcon() icon.addPixmap(QtGui.QPixmap(":/icons/Icon_Library/cartesian.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.ui.set_signals_pb_1D = QtWidgets.QPushButton('') self.ui.set_signals_pb_1D.setToolTip('Change navigation/signal axes') self.ui.set_signals_pb_1D_bis = QtWidgets.QPushButton('') self.ui.set_signals_pb_1D_bis.setToolTip('Change navigation/signal axes') self.ui.set_signals_pb_1D.setIcon(icon) self.ui.set_signals_pb_1D_bis.setIcon(icon) self.ui.set_signals_pb_2D = QtWidgets.QPushButton('') self.ui.set_signals_pb_2D.setToolTip('Change navigation/signal axes') self.ui.set_signals_pb_2D.setIcon(icon) self.ui.set_signals_pb_2D_bis = QtWidgets.QPushButton('') self.ui.set_signals_pb_2D_bis.setToolTip('Change navigation/signal axes') self.ui.set_signals_pb_2D_bis.setIcon(icon) self.ui.navigator1D.ui.button_widget.layout().insertWidget(0, self.ui.set_signals_pb_1D) self.ui.navigator2D.ui.buttons_layout.insertWidget(0, self.ui.set_signals_pb_2D) self.ui.viewer1D.ui.button_widget.layout().insertWidget(0, self.ui.set_signals_pb_1D_bis) self.ui.viewer2D.ui.buttons_layout.insertWidget(0, self.ui.set_signals_pb_2D_bis) #main_layout.addWidget(vsplitter) self.ui.set_signals_pb_1D.clicked.connect(self.signal_axes_selection) self.ui.set_signals_pb_2D.clicked.connect(self.signal_axes_selection) self.ui.set_signals_pb_1D_bis.clicked.connect(self.signal_axes_selection) self.ui.set_signals_pb_2D_bis.clicked.connect(self.signal_axes_selection) #to start: display as default a 2D navigator and a 1D viewer self.ui.navigator1D.parent.setVisible(False) self.ui.viewer2D.parent.setVisible(True)
def set_GUI(self): """ Create the graphic interface of the h5 file analyser, including: * *h5 file dock* : QtreeWidget (custom instance of Tree_layout) showing the contents of the h5 file * *status bar* : the top_down information bar * *tree_dock* : The QTree viewer * *1D viewer dock* : the preview window of 1D data * *2D viewer dock* : the preview window of 2D data * *Navigator viewer dock* : the global navigator graphic interface """ # %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% # h5 file dock V_splitter = QtWidgets.QSplitter(Qt.Vertical) H_splitter = QtWidgets.QSplitter(Qt.Horizontal) Form = QtWidgets.QWidget() self.ui.h5file_tree = Tree_layout(Form, col_counts=2, labels=["Node", 'Pixmap']) self.ui.h5file_tree.ui.Tree.setMinimumWidth(250) self.ui.h5file_tree.ui.Tree.itemClicked.connect( self.show_h5_attributes) self.ui.h5file_tree.ui.Tree.itemDoubleClicked.connect( self.show_h5_data) V_splitter.addWidget(Form) self.ui.attributes_table = pymodaq_ptypes.Table_custom() V_splitter.addWidget(self.ui.attributes_table) H_splitter.addWidget(V_splitter) self.ui.settings_tree = ParameterTree() self.ui.settings_tree.setMinimumWidth(300) H_splitter.addWidget(self.ui.settings_tree) self.ui.menubar = self.mainwindow.menuBar() self.create_menu(self.ui.menubar) # %%create status bar self.ui.statusbar = QtWidgets.QStatusBar() self.ui.statusbar.setMaximumHeight(25) # %% create tree dock file_dock = Dock("File data", size=(1, 1), autoOrientation=False) # give this dock the minimum possible size file_dock.setOrientation('vertical') file_dock.addWidget(H_splitter) file_dock.addWidget(self.ui.statusbar) self.settings = Parameter.create(name='Param', type='group') self.ui.settings_tree.setParameters(self.settings, showTop=False) # #%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% # #% 1D viewer Dock viewer1D_widget = QtWidgets.QWidget() self.ui.viewer1D = Viewer1D(viewer1D_widget) dock1D = Dock('Viewer1D') dock1D.addWidget(viewer1D_widget) # %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% # % 2D viewer Dock viewer2D_widget = QtWidgets.QWidget() self.ui.viewer2D = Viewer2D(viewer2D_widget) dock2D = Dock('Viewer2D') dock2D.addWidget(viewer2D_widget) # #%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% # #% Navigator viewer Dock navigator1D_widget = QtWidgets.QWidget() self.ui.navigator1D = Viewer1D(navigator1D_widget) self.ui.navigator1D.ui.crosshair.crosshair_dragged.connect( self.update_viewer_data) self.ui.navigator1D.ui.crosshair_pb.click() navigator2D_widget = QtWidgets.QWidget() self.ui.navigator2D = Viewer2D(navigator2D_widget) self.ui.navigator2D.crosshair_dragged.connect( self.update_viewer_data ) # export scaled position in conjonction with 2D scaled axes self.ui.navigator2D.ui.crosshair_pb.click() dock_nav = Dock('Navigator') dock_nav.addWidget(navigator1D_widget) dock_nav.addWidget(navigator2D_widget, 1, 0) self.dockarea.addDock(file_dock, 'top') self.dockarea.addDock(dock2D, 'right', file_dock) self.dockarea.addDock(dock1D, 'bottom', dock2D) self.dockarea.addDock(dock_nav, 'right', dock2D)
def set_GUI(self): ########################################### ########################################### #init the docks containing the main widgets ####################################################################################################################### #create a dock containing a viewer object, displaying the data for the spectrometer self.dock_viewer = Dock('Viewer dock', size=(350, 350)) self.dockarea.addDock(self.dock_viewer, 'left') target_widget = QtWidgets.QWidget() self.viewer = Viewer1D(target_widget) self.dock_viewer.addWidget(target_widget) ################################################################ #create a logger dock where to store info senf from the programm self.dock_logger = Dock("Logger") self.logger_list = QtWidgets.QListWidget() self.logger_list.setMinimumWidth(300) self.dock_logger.addWidget(self.logger_list) self.dockarea.addDock(self.dock_logger, 'right') self.log_signal[str].connect(self.add_log) ############################################ # creating a menubar self.menubar = self.mainwindow.menuBar() self.create_menu(self.menubar) #creating a toolbar self.toolbar = QtWidgets.QToolBar() self.create_toolbar() self.mainwindow.addToolBar(self.toolbar) #creating a status bar self.statusbar = QtWidgets.QStatusBar() self.statusbar.setMaximumHeight(25) self.status_laser = QtWidgets.QLabel('????') self.status_laser.setAlignment(Qt.AlignCenter) #self.status_laser.setButtonSymbols(QtWidgets.QAbstractSpinBox.NoButtons) #self.status_laser.setReadOnly(True) self.status_laser.setMaximumWidth(80) self.status_laser.setMinimumWidth(80) self.status_laser.setToolTip('Current laser wavelength') self.status_laser.setStyleSheet("background-color: red") self.status_center = QtWidgets.QLabel('????') self.status_center.setAlignment(Qt.AlignCenter) #self.status_center.setReadOnly(True) #self.status_center.setButtonSymbols(QtWidgets.QAbstractSpinBox.NoButtons) self.status_center.setMaximumWidth(80) self.status_center.setMinimumWidth(80) self.status_center.setToolTip( 'center frequency of the spectrum, either in nm or cm-1') self.status_center.setStyleSheet("background-color: red") self.status_init = QLED() self.status_init.setToolTip('Initialization state of the detector') self.status_init.set_as_false() self.status_init.clickable = False self.statusbar.addPermanentWidget(self.status_laser) self.statusbar.addPermanentWidget(self.status_center) self.statusbar.addPermanentWidget(self.status_init) self.dockarea.window().setStatusBar(self.statusbar) ############################################# self.settings = Parameter.create(name='settings', type='group', children=self.params) self.settings.sigTreeStateChanged.connect(self.parameter_tree_changed) dock_config_settings = Dock('Configuration', size=(300, 350)) self.dockarea.addDock(dock_config_settings, 'above', self.dock_logger) # create main parameter tree self.config_settings_tree = ParameterTree() dock_config_settings.addWidget(self.config_settings_tree, 10) self.config_settings_tree.setMinimumWidth(300) self.config_settings_tree.setParameters(self.settings.child( ('config_settings')), showTop=False) #any change to the tree on the user interface will call the parameter_tree_changed method where all actions will be applied dock_calib_settings = Dock('Calibration', size=(300, 350)) self.dockarea.addDock(dock_calib_settings, 'above', self.dock_logger) # create main parameter tree self.calib_settings_tree = ParameterTree() dock_calib_settings.addWidget(self.calib_settings_tree, 10) self.calib_settings_tree.setMinimumWidth(300) self.calib_settings_tree.setParameters(self.settings.child( ('calib_settings')), showTop=False) #any change to the tree on the user interface will call the parameter_tree_changed method where all actions will be applied #this one for the custom application settings dock_acq_settings = Dock('Acquisition', size=(300, 350)) self.dockarea.addDock(dock_acq_settings, 'above', dock_config_settings) # create main parameter tree self.acq_settings_tree = ParameterTree() dock_acq_settings.addWidget(self.acq_settings_tree, 10) self.acq_settings_tree.setMinimumWidth(300) self.acq_settings_tree.setParameters(self.settings.child( ('acq_settings')), showTop=False)