def init_gui(self): layout = QGridLayout() # self.setFixedSize(320,100) self.box = roundQGroupBox() self.box.setTitle("Stage") box_layout = QGridLayout() self.box.setLayout(box_layout) self.setLayout(layout) self.collect_data_button = QPushButton('Collect data') self.collect_data_button.clicked.connect(self.start_aqcuisition) box_layout.addWidget(self.collect_data_button) layout.addWidget(self.box)
def init_gui(self): # self.setFixedSize(325,100) layout = QGridLayout() self.setLayout(layout) self.box = roundQGroupBox() self.box.setTitle("Manual registration") box_layout = QGridLayout() self.box.setLayout(box_layout) layout.addWidget(self.box) self.open_button = QPushButton("Open") self.open_button.clicked.connect(self.open_window) box_layout.addWidget(self.open_button) self.show()
def init_gui(self): layout = QGridLayout() # self.setFixedSize(240,200) self.setFixedHeight(200) self.box = roundQGroupBox() self.box.setTitle("Galvo control") box_layout = QGridLayout() self.box.setLayout(box_layout) self.setLayout(layout) self.register_button = QPushButton('Register') self.create_voltage_button = QPushButton('Create voltage') self.points_per_contour_textbox = QLineEdit() self.points_per_contour_textbox.setValidator(QtGui.QIntValidator()) self.points_per_contour_textbox.setText('100') self.sampling_rate_textbox = QLineEdit() self.sampling_rate_textbox.setValidator(QtGui.QIntValidator()) self.sampling_rate_textbox.setText('50000') self.scan_button = QPushButton('Start scan') self.scan_button.clicked.connect(self.scan) self.register_button.clicked.connect(self.register) self.create_voltage_button.clicked.connect( self.request_mask_coordinates) box_layout.addWidget(self.register_button, 1, 0) box_layout.addWidget(QLabel('Points per contour:')) box_layout.addWidget(self.points_per_contour_textbox, 2, 1) box_layout.addWidget(QLabel('Sampling rate:'), 3, 0) box_layout.addWidget(self.sampling_rate_textbox, 3, 1) box_layout.addWidget(self.create_voltage_button, 4, 0) box_layout.addWidget(self.scan_button, 4, 1) layout.addWidget(self.box) self.open_latest_transformation()
def __init__(self, *args, **kwargs): super().__init__() # self.setFixedSize(100,500) layout = QGridLayout() self.setLayout(layout) self.image_viewer = SelectPointImageView() layout.addWidget(self.image_viewer, 0, 0, 1, 3) open_image_button = QPushButton("Open image from file") retreive_image_from_camera_button = QPushButton("Load camera image") open_image_button.clicked.connect(self.open_image_file) retreive_image_from_camera_button.clicked.connect( lambda: self.sig_request_camera_image.emit()) layout.addWidget(open_image_button, 1, 0, 1, 1) layout.addWidget(retreive_image_from_camera_button, 1, 1, 1, 1) self.coordinate_counter = QLabel("Saved coordinates: 0") layout.addWidget(self.coordinate_counter, 2, 0) self.filename_textbox = QLabel("File: ") layout.addWidget(self.filename_textbox, 2, 1) transformation_box = roundQGroupBox() transformation_box.setTitle("Transformation") transformation_box_layout = QGridLayout() transformation_box.setLayout(transformation_box_layout) self.transformation_order_spinbox = QSpinBox() transformation_box_layout.addWidget(QLabel("Polynomial order:"), 0, 0) transformation_box_layout.addWidget(self.transformation_order_spinbox, 0, 1) find_transform_button = QPushButton("Find transform") find_transform_button.clicked.connect(self.get_transformation) transformation_box_layout.addWidget(find_transform_button, 2, 0, 1, 2) layout.addWidget(transformation_box, 1, 2, 3, 1) coords_container = roundQGroupBox() coords_container.setTitle("Coordinates") coords_container_layout = QGridLayout() coords_container.setLayout(coords_container_layout) abs_coordinate_label_x = QLabel("x: ") self.abs_coordinate_textbox_x = QtWidgets.QLineEdit() self.abs_coordinate_textbox_x.setValidator(QtGui.QDoubleValidator()) abs_coordinate_label_y = QLabel("y: ") self.abs_coordinate_textbox_y = QtWidgets.QLineEdit() self.abs_coordinate_textbox_y.setValidator(QtGui.QDoubleValidator()) img_coordinate_label_x = QLabel("x: ") self.img_coordinate_textbox_x = QtWidgets.QLineEdit() self.img_coordinate_textbox_x.setValidator(QtGui.QDoubleValidator()) img_coordinate_label_y = QLabel("y: ") self.img_coordinate_textbox_y = QtWidgets.QLineEdit() self.img_coordinate_textbox_y.setValidator(QtGui.QDoubleValidator()) get_crosshair_coords_button = QPushButton("Pick coordinate") get_crosshair_coords_button.clicked.connect( self.get_crosshair_coordinates) save_coords_button = QPushButton("Save coordinates") save_coords_button.clicked.connect(self.save_coords) coords_container_layout.addWidget(QLabel("Absolute coordinates"), 0, 1, 1, 2) coords_container_layout.addWidget(abs_coordinate_label_x, 1, 0) coords_container_layout.addWidget(self.abs_coordinate_textbox_x, 1, 1) coords_container_layout.addWidget(abs_coordinate_label_y, 2, 0) coords_container_layout.addWidget(self.abs_coordinate_textbox_y, 2, 1) coords_container_layout.addWidget(QLabel("Image coordinates"), 0, 4, 1, 1) coords_container_layout.addWidget(img_coordinate_label_x, 1, 3) coords_container_layout.addWidget(self.img_coordinate_textbox_x, 1, 4) coords_container_layout.addWidget(img_coordinate_label_y, 2, 3) coords_container_layout.addWidget(self.img_coordinate_textbox_y, 2, 4) coords_container_layout.addWidget(get_crosshair_coords_button, 3, 4, 1, 1) coords_container_layout.addWidget(save_coords_button, 4, 0, 1, 5) layout.addWidget(coords_container, 3, 0, 3, 2) self.found_transformation_container = roundQGroupBox() self.found_transformation_container.setTitle("Result") found_transformation_container_layout = QGridLayout() self.found_transformation_container.setLayout( found_transformation_container_layout) self.found_transformation_text = QLabel("No transformation") found_transformation_container_layout.addWidget( self.found_transformation_text, 0, 0) self.devices_dropdown = QComboBox() devices = ["DMD: 640", "DMD: 532", "DMD: 488", "Galvos"] self.devices_dropdown.addItems(devices) self.cast_transformation_button = QPushButton("Cast") self.cast_transformation_button.clicked.connect( self.cast_transformation) found_transformation_container_layout.addWidget( QLabel("Cast to:"), 1, 0) found_transformation_container_layout.addWidget( self.devices_dropdown, 1, 1) found_transformation_container_layout.addWidget( self.cast_transformation_button, 2, 0, 1, 2) layout.addWidget(self.found_transformation_container, 4, 2, 2, 1) self.setMinimumSize(800, 1000) self.show()
def init_gui(self): self.setWindowTitle("Coordinate control") self.layout = QGridLayout() self.setMinimumSize(1250, 1000) self.setLayout(self.layout) self.image_mask_stack = QTabWidget() self.selection_view = DrawingWidget(self) self.selection_view.enable_drawing(True) self.selection_view.getView().setLimits(xMin=0, xMax=2048, yMin=0, yMax=2048, minXRange=2048, minYRange=2048, maxXRange=2048, maxYRange=2048) self.selection_view.ui.roiBtn.hide() self.selection_view.ui.menuBtn.hide() self.selection_view.ui.normGroup.hide() self.selection_view.ui.roiPlot.hide() # self.selection_view.setImage(plt.imread('CoordinatesManager/Registration_Images/StageRegistration/Distance200_Offset0/A1.png')) self.mask_view = SquareImageView() self.mask_view.getView().setLimits(xMin=0, xMax=2048, yMin=0, yMax=2048, minXRange=2048, minYRange=2048, maxXRange=2048, maxYRange=2048) self.mask_view.ui.roiBtn.hide() self.mask_view.ui.menuBtn.hide() self.mask_view.ui.normGroup.hide() self.mask_view.ui.roiPlot.hide() self.mask_view.ui.histogram.hide() self.image_mask_stack.addTab(self.selection_view, 'Select') self.image_mask_stack.addTab(self.mask_view, 'Mask') self.layout.addWidget(self.image_mask_stack, 0, 0, 5, 1) # ---------------------- Mask generation Container -------------- self.maskGeneratorContainer = roundQGroupBox() self.maskGeneratorContainer.setFixedSize(320, 220) self.maskGeneratorContainer.setTitle("Mask generator") self.maskGeneratorContainerLayout = QGridLayout() self.maskGeneratorLayout = QGridLayout() self.maskGeneratorContainer.setLayout( self.maskGeneratorContainerLayout) self.loadMaskFromFileButton = QPushButton('Open mask') self.loadMaskFromFileButton.clicked.connect(self.load_mask_from_file) self.addRoiButton = QPushButton("Add ROI") self.createMaskButton = QPushButton("Create mask") self.removeSelectionButton = QPushButton("Remove ROIs") self.addRoiButton.clicked.connect(self.add_polygon_roi) self.createMaskButton.clicked.connect(self.create_mask) self.removeSelectionButton.clicked.connect(self.remove_selection) self.maskGeneratorContainerLayout.addWidget(self.addRoiButton, 1, 0) self.maskGeneratorContainerLayout.addWidget(self.createMaskButton, 2, 0) self.maskGeneratorContainerLayout.addWidget(self.removeSelectionButton, 1, 1) self.selectionOptionsContainer = roundQGroupBox() self.selectionOptionsContainer.setTitle('Options') self.selectionOptionsLayout = QGridLayout() self.fillContourButton = QCheckBox() self.invertMaskButton = QCheckBox() self.thicknessSpinBox = QSpinBox() self.thicknessSpinBox.setRange(1, 25) self.selectionOptionsLayout.addWidget(QLabel('Fill contour:'), 0, 0) self.selectionOptionsLayout.addWidget(self.fillContourButton, 0, 1) self.selectionOptionsLayout.addWidget(QLabel('Invert mask:'), 1, 0) self.selectionOptionsLayout.addWidget(self.invertMaskButton, 1, 1) self.selectionOptionsLayout.addWidget(QLabel('Thickness:'), 2, 0) self.selectionOptionsLayout.addWidget(self.thicknessSpinBox, 2, 1) self.selectionOptionsContainer.setLayout(self.selectionOptionsLayout) self.snapFovButton = QPushButton('Image FOV') self.snapFovButton.clicked.connect(self.snap_fov) self.maskGeneratorContainerLayout.addWidget(self.snapFovButton, 0, 0, 1, 1) self.maskGeneratorContainerLayout.addWidget( self.loadMaskFromFileButton, 0, 1, 1, 1) self.maskGeneratorContainerLayout.addWidget( self.selectionOptionsContainer, 2, 1, 2, 1) self.layout.addWidget(self.maskGeneratorContainer, 0, 1) self.DMDWidget = DMDWidget.DMDWidget() self.layout.addWidget(self.DMDWidget, 1, 1) self.DMDWidget.sig_request_mask_coordinates.connect( lambda: self.cast_mask_coordinates('dmd')) self.sig_cast_mask_coordinates_to_dmd.connect( self.DMDWidget.receive_mask_coordinates) self.DMDWidget.sig_start_registration.connect( lambda: self.sig_start_registration.emit()) self.DMDWidget.sig_finished_registration.connect( lambda: self.sig_finished_registration.emit()) self.GalvoWidget = GalvoWidget.GalvoWidget() self.layout.addWidget(self.GalvoWidget, 2, 1) self.GalvoWidget.sig_request_mask_coordinates.connect( lambda: self.cast_mask_coordinates('galvo')) self.sig_cast_mask_coordinates_to_galvo.connect( self.GalvoWidget.receive_mask_coordinates) self.GalvoWidget.sig_start_registration.connect( lambda: self.sig_start_registration.emit()) self.GalvoWidget.sig_finished_registration.connect( lambda: self.sig_finished_registration.emit()) self.ManualRegistrationWidget = ManualRegistration.ManualRegistrationWidget( self) self.ManualRegistrationWidget.sig_request_camera_image.connect( self.cast_camera_image) self.sig_cast_camera_image.connect( self.ManualRegistrationWidget.receive_camera_image) self.layout.addWidget(self.ManualRegistrationWidget, 3, 1) self.StageRegistrationWidget = StageRegistrationWidget.StageWidget( self) self.layout.addWidget(self.StageRegistrationWidget, 4, 1)
def init_gui(self): layout = QGridLayout() # In microsec, the dark time between frame changes. self.ALP_OFF_TIME = 44 self.setFixedSize(320, 450) self.box = roundQGroupBox() self.box.setTitle("DMD control") box_layout = QGridLayout() self.box.setLayout(box_layout) self.setLayout(layout) self.connect_button = QPushButton("Connect") self.connect_button.setStyleSheet( "QPushButton {background-color: #A3C1DA;}") self.register_button = QPushButton("Register") lasers = ["640", "532", "488"] self.transform_for_laser_menu = QListWidget() self.transform_for_laser_menu.addItems(lasers) self.transform_for_laser_menu.setFixedHeight(52) self.transform_for_laser_menu.setFixedWidth(82) self.transform_for_laser_menu.setCurrentRow(0) self.project_button = QPushButton("Start projecting") self.project_button.setStyleSheet( "QPushButton {background-color: #99FFCC;}") self.clear_button = QPushButton("Clear memory") self.white_project_button = QPushButton("Full illum.") self.white_project_button.setStyleSheet( "QPushButton {background-color: #FFE5CC;}") self.load_mask_container_stack = QStackedWidget() self.connect_button.clicked.connect(self.connect) self.register_button.clicked.connect(lambda: self.register( self.transform_for_laser_menu.selectedItems()[0].text())) self.project_button.clicked.connect(self.project) self.clear_button.clicked.connect(self.clear) self.white_project_button.clicked.connect(self.project_full_white) # Stack page 1 self.load_mask_container_1 = roundQGroupBox() self.load_mask_container_1.setTitle("Load mask") load_mask_container_layout_1 = QGridLayout() self.load_mask_container_1.setLayout(load_mask_container_layout_1) self.load_mask_from_widget_button = QPushButton("From mask generator") self.load_mask_from_file_button = QPushButton("From file") self.load_mask_from_widget_button.clicked.connect( self.load_mask_from_widget) self.load_mask_from_file_button.clicked.connect( self.load_mask_from_memory) load_mask_container_layout_1.addWidget( self.load_mask_from_widget_button, 0, 0) load_mask_container_layout_1.addWidget(self.load_mask_from_file_button, 1, 0) # Stack page 2 self.load_mask_container_2 = roundQGroupBox() self.load_mask_container_2.setTitle("Load mask") load_mask_container_layout_2 = QGridLayout() self.load_mask_container_2.setLayout(load_mask_container_layout_2) self.load_image = QPushButton("Image") self.load_folder = QPushButton("Folder") self.load_video = QPushButton("Video") self.back_load_mask_container_index0 = QPushButton("Back") self.load_image.clicked.connect(self.load_mask_from_file) self.load_folder.clicked.connect(self.load_mask_from_folder) self.back_load_mask_container_index0.clicked.connect( lambda: self.load_mask_container_stack.setCurrentIndex(0)) load_mask_container_layout_2.addWidget(self.load_image, 0, 0, 1, 2) load_mask_container_layout_2.addWidget(self.load_folder, 1, 0, 1, 2) load_mask_container_layout_2.addWidget(self.load_video, 2, 0) load_mask_container_layout_2.addWidget( self.back_load_mask_container_index0, 2, 1) ## Add layers to stack self.load_mask_container_stack.addWidget(self.load_mask_container_1) self.load_mask_container_stack.addWidget(self.load_mask_container_2) # Detailed settings self.settings_container = roundQGroupBox() self.settings_container.setTitle("Settings") settings_container_layout = QGridLayout() self.settings_container.setLayout(settings_container_layout) settings_container_layout.addWidget(QLabel("ALP_PROJ_MODE"), 0, 0) self.ALP_PROJ_MODE_Combox = QComboBox() self.ALP_PROJ_MODE_Combox.addItems(["ALP_MASTER", "ALP_SLAVE"]) self.ALP_PROJ_MODE_Combox.setToolTip( "This ControlType is used to select from an internal or external trigger source." ) settings_container_layout.addWidget(self.ALP_PROJ_MODE_Combox, 0, 1) settings_container_layout.addWidget(QLabel("ALP_PROJ_STEP"), 2, 0) self.ALP_PROJ_STEP_Combox = QComboBox() self.ALP_PROJ_STEP_Combox.addItems(["ALP_DEFAULT", "ALP_EDGE_RISING"]) self.ALP_PROJ_STEP_Combox.setToolTip( "Set frame switching trigger method in the sequence.(Only in ALP_MASTER mode)" ) settings_container_layout.addWidget(self.ALP_PROJ_STEP_Combox, 2, 1) settings_container_layout.addWidget(QLabel("ALP_BIN_MODE"), 3, 0) self.ALP_ALP_BIN_MODE_Combox = QComboBox() self.ALP_ALP_BIN_MODE_Combox.addItems( ["ALP_BIN_UNINTERRUPTED", "ALP_BIN_NORMAL"]) self.ALP_ALP_BIN_MODE_Combox.setToolTip( "Binary mode: select from ALP_BIN_NORMAL and ALP_BIN_UNINTERRUPTED (No dark phase between frames)" ) # self.ALP_ALP_BIN_MODE_Combox.currentIndexChanged.connect(self.set_repeat_from_BIN_MODE) settings_container_layout.addWidget(self.ALP_ALP_BIN_MODE_Combox, 3, 1) self.Illumination_time_textbox = QLineEdit() self.Illumination_time_textbox.setValidator(QtGui.QIntValidator()) self.Illumination_time_textbox.setText("1000000") # Default 33334 self.repeat_imgseq_button = QCheckBox() self.repeat_imgseq_button.setChecked(True) self.repeat_imgseq_button.setToolTip("Repeat the sequence.") Illumination_time_label = QLabel("Illumination time(µs):") Illumination_time_label.setToolTip( "Display time of a single image of the sequence in microseconds. PictureTime is set to minimize the dark time according to illuminationTime, +44 us e.g." ) settings_container_layout.addWidget(Illumination_time_label, 4, 0) settings_container_layout.addWidget(self.Illumination_time_textbox, 4, 1) illumination_time_calculation_button = QPushButton( "Fill in illu. time for Hz:") settings_container_layout.addWidget( illumination_time_calculation_button, 5, 0) illumination_time_calculation_button.clicked.connect( self.calculate_illumination_time_for_frequency) self.expected_projection_frequency_textbox = QLineEdit() self.expected_projection_frequency_textbox.setValidator( QtGui.QIntValidator()) self.expected_projection_frequency_textbox.setText("2000") settings_container_layout.addWidget( self.expected_projection_frequency_textbox, 5, 1) settings_container_layout.addWidget(QLabel("Repeat sequence:"), 6, 0) settings_container_layout.addWidget(self.repeat_imgseq_button, 6, 1) box_layout.addWidget(self.connect_button, 0, 0) box_layout.addWidget(self.register_button, 0, 1) box_layout.addWidget(QLabel("Register with laser:"), 1, 1) box_layout.addWidget(self.transform_for_laser_menu, 2, 1, 2, 1) box_layout.addWidget(self.project_button, 2, 0) box_layout.addWidget(self.clear_button, 3, 0) box_layout.addWidget(self.white_project_button, 1, 0) box_layout.addWidget(self.load_mask_container_stack, 4, 0, 1, 2) box_layout.addWidget(self.settings_container, 5, 0, 1, 2) layout.addWidget(self.box) self.open_latest_transformation()
def init_gui(self): self.setWindowTitle("Coordinate control") self.layout = QGridLayout() self.setMinimumSize(1250, 1000) self.setLayout(self.layout) self.image_mask_stack = QTabWidget() #---------------------------ROIs win---------------------------------- self.selection_view = DrawingWidget(self) self.selection_view.setMinimumWidth(900) self.selection_view.enable_drawing(True) # self.selection_view.getView().setLimits(xMin = 0, xMax = 2048, yMin = 0, yMax = 2048, \ # minXRange = 2048, minYRange = 2048, maxXRange = 2048, maxYRange = 2048) self.selection_view.ui.roiBtn.hide() self.selection_view.ui.menuBtn.hide() self.selection_view.ui.normGroup.hide() self.selection_view.ui.roiPlot.hide() # self.selection_view.setImage(plt.imread('CoordinatesManager/Registration_Images/StageRegistration/Distance200_Offset0/A1.png')) #---------------------------Mask win---------------------------------- self.mask_view = SquareImageView() self.mask_view.getView().setLimits(xMin = 0, xMax = 2048, yMin = 0, yMax = 2048, \ minXRange = 2048, minYRange = 2048, maxXRange = 2048, maxYRange = 2048) self.mask_view.ui.roiBtn.hide() self.mask_view.ui.menuBtn.hide() self.mask_view.ui.normGroup.hide() self.mask_view.ui.roiPlot.hide() self.mask_view.ui.histogram.hide() #-------------------------MAsk RCNN----------------------------------- MLmaskviewBox = QWidget() MLmaskviewBoxLayout = QGridLayout() self.Matdisplay_Figure = Figure() self.Matdisplay_Canvas = FigureCanvas(self.Matdisplay_Figure) # self.Matdisplay_Canvas.setFixedWidth(900) # self.Matdisplay_Canvas.setFixedHeight(900) self.Matdisplay_Canvas.mpl_connect('button_press_event', self._onclick) self.Matdisplay_toolbar = NavigationToolbar(self.Matdisplay_Canvas, self) MLmaskviewBoxLayout.addWidget(self.Matdisplay_toolbar, 0, 0) MLmaskviewBoxLayout.addWidget(self.Matdisplay_Canvas, 1, 0) MLmaskviewBox.setLayout(MLmaskviewBoxLayout) self.image_mask_stack.addTab(self.selection_view, 'Select') self.image_mask_stack.addTab(self.mask_view, 'Mask') self.image_mask_stack.addTab(MLmaskviewBox, 'Mask-RCNN') self.layout.addWidget(self.image_mask_stack, 0, 0, 4, 7) # ---------------------- Mask generation Container -------------- self.maskGeneratorContainer = roundQGroupBox() self.maskGeneratorContainer.setFixedSize(320, 220) self.maskGeneratorContainer.setTitle("Mask generator") self.maskGeneratorContainerLayout = QGridLayout() self.maskGeneratorLayout = QGridLayout() self.maskGeneratorContainer.setLayout( self.maskGeneratorContainerLayout) # self.loadMaskFromFileButton = QPushButton('Load mask') # self.loadMaskFromFileButton.clicked.connect(self.load_mask_from_file) self.addRoiButton = QPushButton("Add ROI") self.createMaskButton = QPushButton("Add mask") self.deleteMaskButton = QPushButton("Delete mask") self.removeSelectionButton = cleanButton() self.removeSelectionButton.setFixedHeight(25) self.removeSelectionButton.setToolTip("Remove rois and output signals") self.addRoiButton.clicked.connect(self.add_polygon_roi) self.createMaskButton.clicked.connect(self.create_mask) self.deleteMaskButton.clicked.connect(self.delete_mask) self.removeSelectionButton.clicked.connect(self.remove_selection) self.maskGeneratorContainerLayout.addWidget(self.addRoiButton, 0, 0) self.maskGeneratorContainerLayout.addWidget(self.createMaskButton, 2, 0) self.maskGeneratorContainerLayout.addWidget(self.deleteMaskButton, 2, 2) self.maskGeneratorContainerLayout.addWidget(self.removeSelectionButton, 2, 3) # self.maskGeneratorContainerLayout.addWidget(self.loadMaskFromFileButton, 2, 1) self.clearRoiButton = QPushButton("Clear ROI") self.clearRoiButton.clicked.connect( lambda: self.selection_view.clear_rois()) self.maskGeneratorContainerLayout.addWidget(self.clearRoiButton, 0, 1) self.maskGeneratorContainerLayout.addWidget(QLabel("Mask index:"), 1, 0) self.mask_index_spinbox = QSpinBox() self.mask_index_spinbox.setMinimum(1) self.mask_index_spinbox.setValue(1) self.maskGeneratorContainerLayout.addWidget(self.mask_index_spinbox, 1, 1) self.previous_mask_button = QPushButton() self.previous_mask_button.setStyleSheet( "QPushButton {color:white;background-color: #FFCCE5;}" "QPushButton:hover:!pressed {color:white;background-color: #CCFFFF;}" ) self.previous_mask_button.setToolTip( "Click arrow to enable WASD keyboard control") self.previous_mask_button.setFixedWidth(60) self.previous_mask_button.setIcon(QIcon('./Icons/LeftArrow.png')) self.previous_mask_button.clicked.connect( lambda: self.show_mask_with_index(-1)) self.maskGeneratorContainerLayout.addWidget(self.previous_mask_button, 1, 2) self.next_mask_button = QPushButton() self.next_mask_button.setStyleSheet( "QPushButton {color:white;background-color: #FFCCE5;}" "QPushButton:hover:!pressed {color:white;background-color: #CCFFFF;}" ) self.next_mask_button.setToolTip( "Click arrow to enable WASD keyboard control") self.next_mask_button.setFixedWidth(60) self.next_mask_button.setIcon(QIcon('./Icons/RightArrow.png')) self.next_mask_button.clicked.connect( lambda: self.show_mask_with_index(1)) self.maskGeneratorContainerLayout.addWidget(self.next_mask_button, 1, 3) self.selectionOptionsContainer = roundQGroupBox() self.selectionOptionsContainer.setTitle('Options') self.selectionOptionsLayout = QGridLayout() self.fillContourButton = QCheckBox() self.invertMaskButton = QCheckBox() self.thicknessSpinBox = QSpinBox() self.thicknessSpinBox.setRange(1, 25) self.selectionOptionsLayout.addWidget(QLabel('Fill contour:'), 0, 0) self.selectionOptionsLayout.addWidget(self.fillContourButton, 0, 1) self.selectionOptionsLayout.addWidget(QLabel('Invert mask:'), 1, 0) self.selectionOptionsLayout.addWidget(self.invertMaskButton, 1, 1) self.selectionOptionsLayout.addWidget(QLabel('Thickness:'), 2, 0) self.selectionOptionsLayout.addWidget(self.thicknessSpinBox, 2, 1) lasers = ['640', '532', '488'] self.transform_for_laser_menu = QListWidget() self.transform_for_laser_menu.addItems(lasers) self.transform_for_laser_menu.setFixedHeight(48) self.transform_for_laser_menu.setFixedWidth(65) self.transform_for_laser_menu.setCurrentRow(0) self.selectionOptionsLayout.addWidget(QLabel('To be used with laser:'), 0, 2) self.selectionOptionsLayout.addWidget(self.transform_for_laser_menu, 1, 2) self.selectionOptionsContainer.setLayout(self.selectionOptionsLayout) self.maskGeneratorContainerLayout.addWidget( self.selectionOptionsContainer, 3, 0, 2, 3) #----------------------------Mask-RCNN-------------------------------- self.MLOptionsContainer = roundQGroupBox() self.MLOptionsContainer.setTitle('Mask-RCNN') self.MLOptionsContainerLayout = QGridLayout() self.init_ML_button = QPushButton('Init. ML', self) self.MLOptionsContainerLayout.addWidget(self.init_ML_button, 0, 0) self.init_ML_button.clicked.connect( lambda: self.run_in_thread(self.init_ML)) self.run_ML_button = QPushButton('Analysis', self) self.MLOptionsContainerLayout.addWidget(self.run_ML_button, 1, 0) self.run_ML_button.clicked.connect(self.run_ML_onImg_and_display) self.generate_MLmask_button = QPushButton('To ROIs', self) self.MLOptionsContainerLayout.addWidget(self.generate_MLmask_button, 2, 0) self.generate_MLmask_button.clicked.connect( lambda: self.run_in_thread(self.generate_MLmask)) self.MLOptionsContainer.setLayout(self.MLOptionsContainerLayout) self.maskGeneratorContainerLayout.addWidget(self.MLOptionsContainer, 3, 3, 2, 1) self.layout.addWidget(self.maskGeneratorContainer, 0, 8, 1, 3) self.DMDWidget = DMDWidget.DMDWidget() self.layout.addWidget(self.DMDWidget, 1, 8, 1, 3) """-------------------------------------------------------------------- # Singal sent out from DMDWidget to ask for mask generated here. # And then the generated roi list is sent back to function:receive_mask_coordinates in DMDWidget. # -------------------------------------------------------------------- """ self.DMDWidget.sig_request_mask_coordinates.connect( lambda: self.cast_mask_coordinates('dmd')) self.sig_cast_mask_coordinates_to_dmd.connect( self.DMDWidget.receive_mask_coordinates) self.DMDWidget.sig_start_registration.connect( lambda: self.sig_start_registration.emit()) self.DMDWidget.sig_finished_registration.connect( lambda: self.sig_finished_registration.emit()) #---------------------------Galvo control----------------------------- self.GalvoWidget = GalvoWidget.GalvoWidget() self.GalvoWidget.setFixedWidth(200) self.GalvoWidget.setFixedHeight(180) self.layout.addWidget(self.GalvoWidget, 2, 8, 2, 1) self.GalvoWidget.sig_request_mask_coordinates.connect( lambda: self.cast_mask_coordinates('galvo')) self.sig_cast_mask_coordinates_to_galvo.connect( self.GalvoWidget.receive_mask_coordinates) self.GalvoWidget.sig_start_registration.connect( lambda: self.sig_start_registration.emit()) self.GalvoWidget.sig_finished_registration.connect( lambda: self.sig_finished_registration.emit()) #-------------------------Manual registration------------------------- self.ManualRegistrationWidget = ManualRegistration.ManualRegistrationWidget( ) self.ManualRegistrationWidget.setFixedWidth(100) self.ManualRegistrationWidget.sig_request_camera_image.connect( self.cast_camera_image) self.sig_cast_camera_image.connect( self.ManualRegistrationWidget.receive_camera_image) self.layout.addWidget(self.ManualRegistrationWidget, 2, 9, 1, 1) #-------------------------Stage collect------------------------------- self.StageRegistrationWidget = StageRegistrationWidget.StageWidget() self.StageRegistrationWidget.setFixedWidth(100) self.layout.addWidget(self.StageRegistrationWidget, 3, 9, 1, 1)
def init_gui(self): layout = QGridLayout() self.setFixedSize(320, 400) self.box = roundQGroupBox() self.box.setTitle("DMD control") box_layout = QGridLayout() self.box.setLayout(box_layout) self.setLayout(layout) self.connect_button = QPushButton('Connect') self.connect_button.setStyleSheet( 'QPushButton {background-color: #A3C1DA;}') self.register_button = QPushButton('Register') lasers = ['640', '532', '488'] self.transform_for_laser_menu = QListWidget() self.transform_for_laser_menu.addItems(lasers) self.transform_for_laser_menu.setFixedHeight(52) self.transform_for_laser_menu.setFixedWidth(82) self.transform_for_laser_menu.setCurrentRow(0) self.project_button = QPushButton('Start projecting') self.project_button.setStyleSheet( 'QPushButton {background-color: #99FFCC;}') self.clear_button = QPushButton('Clear memory') self.white_project_button = QPushButton('Full illum.') self.white_project_button.setStyleSheet( 'QPushButton {background-color: #FFE5CC;}') self.load_mask_container_stack = QStackedWidget() self.connect_button.clicked.connect(self.connect) self.register_button.clicked.connect(lambda: self.register( self.transform_for_laser_menu.selectedItems()[0].text())) self.project_button.clicked.connect(self.project) self.clear_button.clicked.connect(self.clear) self.white_project_button.clicked.connect(self.project_full_white) # Stack page 1 self.load_mask_container_1 = roundQGroupBox() self.load_mask_container_1.setTitle('Load mask') load_mask_container_layout_1 = QGridLayout() self.load_mask_container_1.setLayout(load_mask_container_layout_1) self.load_mask_from_widget_button = QPushButton('From mask generator') self.load_mask_from_file_button = QPushButton('From file') self.load_mask_from_widget_button.clicked.connect( self.load_mask_from_widget) self.load_mask_from_file_button.clicked.connect( self.load_mask_from_memory) load_mask_container_layout_1.addWidget( self.load_mask_from_widget_button, 0, 0) load_mask_container_layout_1.addWidget(self.load_mask_from_file_button, 1, 0) # Stack page 2 self.load_mask_container_2 = roundQGroupBox() self.load_mask_container_2.setTitle('Load mask') load_mask_container_layout_2 = QGridLayout() self.load_mask_container_2.setLayout(load_mask_container_layout_2) self.load_image = QPushButton('Image') self.load_folder = QPushButton('Folder') self.load_video = QPushButton('Video') self.back_load_mask_container_index0 = QPushButton('Back') self.load_image.clicked.connect(self.load_mask_from_file) self.load_folder.clicked.connect(self.load_mask_from_folder) self.back_load_mask_container_index0.clicked.connect( lambda: self.load_mask_container_stack.setCurrentIndex(0)) load_mask_container_layout_2.addWidget(self.load_image, 0, 0, 1, 2) load_mask_container_layout_2.addWidget(self.load_folder, 1, 0, 1, 2) load_mask_container_layout_2.addWidget(self.load_video, 2, 0) load_mask_container_layout_2.addWidget( self.back_load_mask_container_index0, 2, 1) ## Add layers to stack self.load_mask_container_stack.addWidget(self.load_mask_container_1) self.load_mask_container_stack.addWidget(self.load_mask_container_2) # Detailed settings self.settings_container = roundQGroupBox() self.settings_container.setTitle('Settings') settings_container_layout = QGridLayout() self.settings_container.setLayout(settings_container_layout) settings_container_layout.addWidget(QLabel('ALP_PROJ_MODE'), 0, 0) self.ALP_PROJ_MODE_Combox = QComboBox() self.ALP_PROJ_MODE_Combox.addItems(['ALP_MASTER', 'ALP_SLAVE']) self.ALP_PROJ_MODE_Combox.setToolTip( "This ControlType is used to select from an internal or external trigger source." ) settings_container_layout.addWidget(self.ALP_PROJ_MODE_Combox, 0, 1) settings_container_layout.addWidget(QLabel('ALP_PROJ_STEP'), 2, 0) self.ALP_PROJ_STEP_Combox = QComboBox() self.ALP_PROJ_STEP_Combox.addItems(['ALP_DEFAULT', 'ALP_EDGE_RISING']) self.ALP_PROJ_STEP_Combox.setToolTip( "Set frame switching trigger method in the sequence.(Only in ALP_MASTER mode)" ) settings_container_layout.addWidget(self.ALP_PROJ_STEP_Combox, 2, 1) settings_container_layout.addWidget(QLabel('ALP_BIN_MODE'), 3, 0) self.ALP_ALP_BIN_MODE_Combox = QComboBox() self.ALP_ALP_BIN_MODE_Combox.addItems( ['ALP_BIN_UNINTERRUPTED', 'ALP_BIN_NORMAL']) self.ALP_ALP_BIN_MODE_Combox.setToolTip( "Binary mode: select from ALP_BIN_NORMAL and ALP_BIN_UNINTERRUPTED (No dark phase between frames)" ) # self.ALP_ALP_BIN_MODE_Combox.currentIndexChanged.connect(self.set_repeat_from_BIN_MODE) settings_container_layout.addWidget(self.ALP_ALP_BIN_MODE_Combox, 3, 1) self.frame_rate_textbox = QLineEdit() self.frame_rate_textbox.setValidator(QtGui.QIntValidator()) self.frame_rate_textbox.setText('1000000') # Default 33334 self.repeat_imgseq_button = QCheckBox() self.repeat_imgseq_button.setChecked(True) self.repeat_imgseq_button.setToolTip("Repeat the sequence.") Illumination_time_label = QLabel(u"Illumination time(µs):") Illumination_time_label.setToolTip( "Display time of a single image of the sequence in microseconds. PictureTime is set to minimize the dark time according to illuminationTime, +44 us e.g." ) settings_container_layout.addWidget(Illumination_time_label, 4, 0) settings_container_layout.addWidget(self.frame_rate_textbox, 4, 1) settings_container_layout.addWidget(QLabel('Repeat sequence:'), 5, 0) settings_container_layout.addWidget(self.repeat_imgseq_button, 5, 1) box_layout.addWidget(self.connect_button, 0, 0) box_layout.addWidget(self.register_button, 0, 1) box_layout.addWidget(QLabel('Register with laser:'), 1, 1) box_layout.addWidget(self.transform_for_laser_menu, 2, 1, 2, 1) box_layout.addWidget(self.project_button, 2, 0) box_layout.addWidget(self.clear_button, 3, 0) box_layout.addWidget(self.white_project_button, 1, 0) box_layout.addWidget(self.load_mask_container_stack, 4, 0, 1, 2) box_layout.addWidget(self.settings_container, 5, 0, 1, 2) layout.addWidget(self.box) self.open_latest_transformation()
def init_gui(self): layout = QGridLayout() self.setFixedSize(320, 300) self.box = roundQGroupBox() self.box.setTitle("DMD control") box_layout = QGridLayout() self.box.setLayout(box_layout) self.setLayout(layout) self.connect_button = QPushButton('Connect') self.register_button = QPushButton('Register') lasers = ['640', '532', '488'] self.transform_for_laser_menu = QListWidget() self.transform_for_laser_menu.addItems(lasers) self.transform_for_laser_menu.setFixedHeight(55) self.transform_for_laser_menu.setCurrentRow(0) self.project_button = QPushButton('Start projecting') self.clear_button = QPushButton('Clear memory') self.white_project_button = QPushButton('Full illum.') self.load_mask_container_stack = QStackedWidget() self.connect_button.clicked.connect(self.connect) self.register_button.clicked.connect(lambda: self.register( self.transform_for_laser_menu.selectedItems()[0].text())) self.project_button.clicked.connect(self.project) self.clear_button.clicked.connect(self.clear) self.white_project_button.clicked.connect(self.project_full_white) # Stack page 1 self.load_mask_container_1 = roundQGroupBox() self.load_mask_container_1.setTitle('Load mask') load_mask_container_layout_1 = QGridLayout() self.load_mask_container_1.setLayout(load_mask_container_layout_1) self.load_mask_from_widget_button = QPushButton('From mask generator') self.load_mask_from_file_button = QPushButton('From file') self.load_mask_from_widget_button.clicked.connect( self.load_mask_from_widget) self.load_mask_from_file_button.clicked.connect( self.load_mask_from_memory) load_mask_container_layout_1.addWidget( self.load_mask_from_widget_button, 0, 0) load_mask_container_layout_1.addWidget(self.load_mask_from_file_button, 1, 0) # Stack page 2 self.load_mask_container_2 = roundQGroupBox() self.load_mask_container_2.setTitle('Load mask') load_mask_container_layout_2 = QGridLayout() self.load_mask_container_2.setLayout(load_mask_container_layout_2) self.load_image = QPushButton('Image') self.load_folder = QPushButton('Folder') self.load_video = QPushButton('Video') self.load_image.clicked.connect(self.load_mask_from_file) self.load_folder.clicked.connect(self.load_mask_from_folder) load_mask_container_layout_2.addWidget(self.load_image, 0, 0) load_mask_container_layout_2.addWidget(self.load_folder, 1, 0) load_mask_container_layout_2.addWidget(self.load_video, 2, 0) # Stack page 3 self.load_mask_container_3 = roundQGroupBox() self.load_mask_container_3.setTitle('Load mask') load_mask_container_layout_3 = QGridLayout() self.load_mask_container_3.setLayout(load_mask_container_layout_3) self.frame_rate_textbox = QLineEdit() self.frame_rate_textbox.setValidator(QtGui.QIntValidator()) self.frame_rate_textbox.setText('1000000') self.repeat_imgseq_button = QCheckBox() self.confirm_button = QPushButton('Set') self.confirm_button.clicked.connect(self.set_movie_settings_on_DMD) load_mask_container_layout_3.addWidget(QLabel(u"Frame duration (µs):"), 0, 0) load_mask_container_layout_3.addWidget(self.frame_rate_textbox, 0, 1) load_mask_container_layout_3.addWidget(QLabel('Repeat sequence:'), 1, 0) load_mask_container_layout_3.addWidget(self.repeat_imgseq_button, 1, 1) load_mask_container_layout_3.addWidget(self.confirm_button, 2, 1) ## Add layers to stack self.load_mask_container_stack.addWidget(self.load_mask_container_1) self.load_mask_container_stack.addWidget(self.load_mask_container_2) self.load_mask_container_stack.addWidget(self.load_mask_container_3) box_layout.addWidget(self.connect_button, 0, 0) box_layout.addWidget(self.register_button, 1, 0) box_layout.addWidget(QLabel('To be used with laser:'), 0, 1) box_layout.addWidget(self.transform_for_laser_menu, 1, 1, 2, 1) box_layout.addWidget(self.project_button, 2, 0) box_layout.addWidget(self.clear_button, 3, 0) box_layout.addWidget(self.white_project_button, 3, 1) box_layout.addWidget(self.load_mask_container_stack, 4, 0, 1, 2) layout.addWidget(self.box) self.open_latest_transformation()