def createFileBrowsingDisplay(self, parentWidget): # Generate the widget self.browsingWidget = qtw.QWidget() self.browsingLayout = qtw.QVBoxLayout(self.browsingWidget) # Generate the radio buttons self.imageTypeButtonGroupWidget = qtw.QWidget() self.imageTypeButtonGroupLayout = qtw.QHBoxLayout(self.imageTypeButtonGroupWidget) self.imageTypeGroupButton = qtw.QButtonGroup(self.imageTypeButtonGroupWidget) self.singleFileRadiobutton = qtw.QRadioButton("Single File") self.singleFileRadiobutton.setChecked( self.parent.config.single_images ) self.imageTypeGroupButton.addButton(self.singleFileRadiobutton) self.imageTypeButtonGroupLayout.addWidget(self.singleFileRadiobutton) self.imageFolderRadiobutton = qtw.QRadioButton("Images Folder") self.imageFolderRadiobutton.setChecked( not self.parent.config.single_images ) self.imageTypeGroupButton.addButton(self.imageFolderRadiobutton) self.imageTypeButtonGroupLayout.addWidget(self.imageFolderRadiobutton) self.imageTypeButtonGroupWidget.setLayout(self.imageTypeButtonGroupLayout) self.imageTypeButtonGroupWidget.setContentsMargins(0, 0, 0, 0) self.browsingLayout.addWidget(self.imageTypeButtonGroupWidget) # Add the button to open a new file self.browseEntry = CBrowse() self.browseEntry.connectButton(self.browseImages) self.browsingLayout.addWidget(self.browseEntry) # Display the widget self.browsingWidget.setLayout(self.browsingLayout) parentWidget.addWidget(self.browsingWidget)
def createDirectoryBrowsingDisplay(self, parentWidget): # Generate the widget self.browsingWidget = qtw.QWidget() self.browsingLayout = qtw.QVBoxLayout(self.browsingWidget) # Add the button to open a new file self.browseEntry = CBrowse() self.browseEntry.connectButton(self.browseDirectory) self.browsingLayout.addWidget(self.browseEntry) # Display the widget self.browsingWidget.setLayout(self.browsingLayout) parentWidget.addWidget(self.browsingWidget)
def createTrajectorySelection(self, parentWidget): # Generate the widget self.trajectorySelectionWidget = qtw.QWidget() self.trajectorySelectionLayout = qtw.QGridLayout( self.trajectorySelectionWidget) # Bitness selection self.sourceSelectionGroupButton = qtw.QButtonGroup( self.trajectorySelectionLayout) current_row = 0 self.fromFileButton = qtw.QRadioButton("Load from File") self.sourceSelectionGroupButton.addButton(self.fromFileButton) self.trajectorySelectionLayout.addWidget(self.fromFileButton, current_row, 0, alignment=qtc.Qt.AlignLeft) self.browseEntry = CBrowse() self.browseEntry.lineEdit.setFixedWidth(250) self.browseEntry.connectButton(self.browseTrajectory) self.trajectorySelectionLayout.addWidget(self.browseEntry, current_row, 1, alignment=qtc.Qt.AlignRight) current_row += 1 self.fromImageButton = qtw.QRadioButton("Load from Image") self.fromImageButton.clicked.connect(self.getScaleFromImage) self.sourceSelectionGroupButton.addButton(self.fromImageButton) self.trajectorySelectionLayout.addWidget(self.fromImageButton, current_row, 0, alignment=qtc.Qt.AlignLeft) self.processTrajectoryButton = qtw.QPushButton("PROCESS") self.processTrajectoryButton.clicked.connect(self.processTrajectory) self.processTrajectoryButton.setFixedWidth(150) self.trajectorySelectionLayout.addWidget(self.processTrajectoryButton, current_row, 1, alignment=qtc.Qt.AlignRight) # Display the widget self.trajectorySelectionWidget.setLayout( self.trajectorySelectionLayout) parentWidget.addWidget(self.trajectorySelectionWidget)
class openImageWindow(qtw.QMainWindow, openImageFunctions): def __init__(self, parent): super(openImageWindow, self).__init__(parent) # Initialise the subwindow self.parent = parent self.image_path = None # Generate the window self.mainWidget = qtw.QWidget() self.mainLayout = qtw.QVBoxLayout(self.mainWidget) self.setWindowTitle("Open Image or Stack...") # Populate the panel self.createFileBrowsingDisplay(self.mainLayout) self.mainLayout.addWidget(CHorizontalSeparator()) self.createImageInfosDisplay(self.mainLayout) self.mainLayout.addWidget(CHorizontalSeparator()) self.createUserActions(self.mainLayout) # Display the panel self.mainWidget.setLayout(self.mainLayout) self.setCentralWidget(self.mainWidget) self.show() #self.setFixedSize(self.size()) # --------------------------------------------------- # Reinitialise the display when the window is closed def closeEvent(self, event=None): event.accept() self.parent.subWindows['open_image'] = None ##-\-\-\-\-\-\-\-\-\-\ ## GENERATE THE DISPLAY ##-/-/-/-/-/-/-/-/-/-/ # --------------------------------------- # Generate the display to browse the file def createFileBrowsingDisplay(self, parentWidget): # Generate the widget self.browsingWidget = qtw.QWidget() self.browsingLayout = qtw.QVBoxLayout(self.browsingWidget) # Generate the radio buttons self.imageTypeButtonGroupWidget = qtw.QWidget() self.imageTypeButtonGroupLayout = qtw.QHBoxLayout(self.imageTypeButtonGroupWidget) self.imageTypeGroupButton = qtw.QButtonGroup(self.imageTypeButtonGroupWidget) self.singleFileRadiobutton = qtw.QRadioButton("Single File") self.singleFileRadiobutton.setChecked( self.parent.config.single_images ) self.imageTypeGroupButton.addButton(self.singleFileRadiobutton) self.imageTypeButtonGroupLayout.addWidget(self.singleFileRadiobutton) self.imageFolderRadiobutton = qtw.QRadioButton("Images Folder") self.imageFolderRadiobutton.setChecked( not self.parent.config.single_images ) self.imageTypeGroupButton.addButton(self.imageFolderRadiobutton) self.imageTypeButtonGroupLayout.addWidget(self.imageFolderRadiobutton) self.imageTypeButtonGroupWidget.setLayout(self.imageTypeButtonGroupLayout) self.imageTypeButtonGroupWidget.setContentsMargins(0, 0, 0, 0) self.browsingLayout.addWidget(self.imageTypeButtonGroupWidget) # Add the button to open a new file self.browseEntry = CBrowse() self.browseEntry.connectButton(self.browseImages) self.browsingLayout.addWidget(self.browseEntry) # Display the widget self.browsingWidget.setLayout(self.browsingLayout) parentWidget.addWidget(self.browsingWidget) # --------------------------------- # Generate the display of the image def createImageInfosDisplay(self, parentWidget): # Generate the widget self.imageInfoWidget = qtw.QWidget() self.imageInfoLayout = qtw.QVBoxLayout(self.imageInfoWidget) # Populate all the informations self.infoGridWidget = qtw.QWidget() self.infoGridLayout = qtw.QGridLayout(self.infoGridWidget) # Number of images self.imageNumberLabel = qtw.QLabel('') self.infoGridLayout.addWidget( CLabel('Number of image(s):'), 0, 0) self.infoGridLayout.addWidget( self.imageNumberLabel, 0, 1) # Image size self.imageSizeLabel = qtw.QLabel('') self.infoGridLayout.addWidget( CLabel('Image Size:'), 1, 0) self.infoGridLayout.addWidget( self.imageSizeLabel, 1, 1) # Image bitness self.imageBitsLabel = qtw.QLabel('') self.infoGridLayout.addWidget( CLabel('Image Bitness:'), 2, 0) self.infoGridLayout.addWidget( self.imageBitsLabel, 2, 1) # Display the grid self.infoGridWidget.setLayout(self.infoGridLayout) self.imageInfoLayout.addWidget( self.infoGridWidget, alignment=qtc.Qt.AlignLeft) # Populate all the informations self.selectionGridWidget = qtw.QWidget() self.selectionGridLayout = qtw.QGridLayout(self.selectionGridWidget) current_row = 0 self.selectionGridLayout.addWidget( qtw.QLabel('Open range:'), current_row, 0, 1, 3) # Range selection current_row += 1 self.frameRangeSelection = CRangeSelection() self.frameRangeSelection.setMin(0) self.frameRangeSelection.setMax(1) self.frameRangeSelection.setRange(0,1) self.frameRangeSelection.setEnabled(False) self.selectionGridLayout.addWidget( self.frameRangeSelection, current_row, 0, 1, 3) # Crop selection current_row += 1 self.cropCheckBox = qtw.QCheckBox('Crop the image?') self.selectionGridLayout.addWidget( self.cropCheckBox, current_row, 0) self.selectionGridLayout.addWidget( qtw.QLabel('size (px):'), current_row, 1) self.cropSizeEntry = qtw.QLineEdit() self.cropSizeEntry.setText( str(self.parent.config.crop_size) ) self.selectionGridLayout.addWidget( self.cropSizeEntry, current_row, 2) # Signed bit correction current_row += 1 self.signCorrectionCheckBox = qtw.QCheckBox('Correct signed bits?') #self.signCorrectionCheckBox.setEnabled(False) self.selectionGridLayout.addWidget( self.signCorrectionCheckBox, current_row, 0, 1, 3) # Signed bit correction current_row += 1 self.backgroundCorrectionCheckBox = qtw.QCheckBox('Apply background correction?') self.backgroundCorrectionCheckBox.setEnabled(False) self.selectionGridLayout.addWidget( self.backgroundCorrectionCheckBox, current_row, 0, 1, 3) # Display the grid self.selectionGridWidget.setLayout(self.selectionGridLayout) self.imageInfoLayout.addWidget( self.selectionGridWidget) # Display the widget self.imageInfoWidget.setLayout(self.imageInfoLayout) parentWidget.addWidget(self.imageInfoWidget) # ---------------------------------- # Generate the controls for the user def createUserActions(self, parentWidget): # Generate the widget self.userActionsWidget = qtw.QWidget() self.userActionsLayout = qtw.QHBoxLayout(self.userActionsWidget) # Add the button to open a new file self.loadButton = qtw.QPushButton("Load") self.loadButton.clicked.connect(self.getImageFromPath) self.loadButton.setStatusTip("Load the selected file or folder.") self.loadButton.setFixedWidth(150) self.loadButton.setEnabled(False) self.userActionsLayout.addWidget(self.loadButton, alignment=qtc.Qt.AlignLeft) # Add the button to close self.closeButton = qtw.QPushButton("Close") self.closeButton.clicked.connect(self.close) self.closeButton.setStatusTip("Close the current window.") self.closeButton.setFixedWidth(150) self.userActionsLayout.addWidget(self.closeButton, alignment=qtc.Qt.AlignRight) # Display the widget self.userActionsWidget.setLayout(self.userActionsLayout) parentWidget.addWidget(self.userActionsWidget)
class convertStackWindow(qtw.QMainWindow, convertStackFunctions): def __init__(self, parent): super(convertStackWindow, self).__init__(parent) # Initialise the subwindow self.parent = parent self.directory = None # Generate the window self.mainWidget = qtw.QWidget() self.mainLayout = qtw.QVBoxLayout(self.mainWidget) self.setWindowTitle("Folders to Stacks...") # Populate the panel self.createDirectoryBrowsingDisplay(self.mainLayout) self.mainLayout.addWidget(CHorizontalSeparator()) self.createStackSelectionDisplay(self.mainLayout) self.mainLayout.addWidget(CHorizontalSeparator()) self.createUserActions(self.mainLayout) # Display the panel self.mainWidget.setLayout(self.mainLayout) self.setCentralWidget(self.mainWidget) self.show() self.setFixedSize(550, 450) # --------------------------------------------------- # Reinitialise the display when the window is closed def closeEvent(self, event=None): event.accept() self.parent.subWindows['convert_stacks'] = None ##-\-\-\-\-\-\-\-\-\-\ ## GENERATE THE DISPLAY ##-/-/-/-/-/-/-/-/-/-/ # --------------------------------------- # Generate the display to browse the file def createDirectoryBrowsingDisplay(self, parentWidget): # Generate the widget self.browsingWidget = qtw.QWidget() self.browsingLayout = qtw.QVBoxLayout(self.browsingWidget) # Add the button to open a new file self.browseEntry = CBrowse() self.browseEntry.connectButton(self.browseDirectory) self.browsingLayout.addWidget(self.browseEntry) # Display the widget self.browsingWidget.setLayout(self.browsingLayout) parentWidget.addWidget(self.browsingWidget) # --------------------------------- # Generate the display of the image def createStackSelectionDisplay(self, parentWidget): # Generate the widget self.folderInfoWidget = qtw.QWidget() self.folderInfoLayout = qtw.QVBoxLayout(self.folderInfoWidget) # Generate the table of folders self.foldersTable = qtw.QTableWidget(0, 4) self.foldersTable.setHorizontalHeaderLabels( ['', 'Name', '# Images', 'Bitness']) self.foldersTable.setSelectionMode(qtw.QAbstractItemView.NoSelection) self.foldersTable.setEditTriggers(qtw.QAbstractItemView.NoEditTriggers) self.foldersTable.setShowGrid(False) self.foldersTable.setMinimumHeight(100) self.folderInfoLayout.addWidget(self.foldersTable) # Add the delete folder checkbox self.deleteFoldersCheckbox = qtw.QCheckBox( 'Delete folder(s) after convertion?') self.deleteFoldersCheckbox.setChecked(True) self.folderInfoLayout.addWidget(self.deleteFoldersCheckbox) # Display the widget self.folderInfoWidget.setLayout(self.folderInfoLayout) parentWidget.addWidget(self.folderInfoWidget) # ---------------------------------- # Generate the controls for the user def createUserActions(self, parentWidget): # Generate the widget self.userActionsWidget = qtw.QWidget() self.userActionsLayout = qtw.QHBoxLayout(self.userActionsWidget) # Add the button to open a new file self.loadButton = qtw.QPushButton("Convert") self.loadButton.clicked.connect(self.convertFolders) self.loadButton.setStatusTip( "Convert the selected image folders into image stacks.") self.loadButton.setFixedWidth(150) self.userActionsLayout.addWidget(self.loadButton, alignment=qtc.Qt.AlignLeft) # Add the button to close self.closeButton = qtw.QPushButton("Close") self.closeButton.clicked.connect(self.close) self.closeButton.setStatusTip("Close the current window.") self.closeButton.setFixedWidth(150) self.userActionsLayout.addWidget(self.closeButton, alignment=qtc.Qt.AlignRight) # Display the widget self.userActionsWidget.setLayout(self.userActionsLayout) parentWidget.addWidget(self.userActionsWidget)
class particleDiffusionWindow(qtw.QMainWindow, particleDiffusionFunctions): def __init__(self, parent, image_class=None): super(particleDiffusionWindow, self).__init__(parent) # Initialise the subwindow self.parent = parent self.trajectory = None self.path_list = None self.loaded_trajectory = None self.image_class = image_class self.space_scale = None self.space_unit = None self.frame_rate = None # Generate the window self.mainWidget = qtw.QWidget() self.mainLayout = qtw.QVBoxLayout(self.mainWidget) self.setWindowTitle("Mean Squared Displacement") # Populate the panel self.createTrajectorySelection(self.mainLayout) self.mainLayout.addWidget(CHorizontalSeparator()) self.createScaleSelection(self.mainLayout) self.mainLayout.addWidget(CHorizontalSeparator()) self.createGraphDisplay(self.mainLayout) #self.createSignalSelection(self.mainLayout) self.mainLayout.addWidget(CHorizontalSeparator()) self.createUserActions(self.mainLayout) # Display the panel self.mainWidget.setLayout(self.mainLayout) self.setCentralWidget(self.mainWidget) self.show() self.setMinimumSize(575, 675) self.resize(575, 675) # Initialise self.initialiseDisplay() # --------------------------------------------------- # Reinitialise the display when the window is closed def closeEvent(self, event=None): event.accept() self.parent.subWindows['msd_analysis'] = None ##-\-\-\-\-\-\-\-\-\-\ ## GENERATE THE DISPLAY ##-/-/-/-/-/-/-/-/-/-/ # ---------------------------------------------------- # Generate the selection widgets to process the signal def createTrajectorySelection(self, parentWidget): # Generate the widget self.trajectorySelectionWidget = qtw.QWidget() self.trajectorySelectionLayout = qtw.QGridLayout( self.trajectorySelectionWidget) # Bitness selection self.sourceSelectionGroupButton = qtw.QButtonGroup( self.trajectorySelectionLayout) current_row = 0 self.fromFileButton = qtw.QRadioButton("Load from File") self.sourceSelectionGroupButton.addButton(self.fromFileButton) self.trajectorySelectionLayout.addWidget(self.fromFileButton, current_row, 0, alignment=qtc.Qt.AlignLeft) self.browseEntry = CBrowse() self.browseEntry.lineEdit.setFixedWidth(250) self.browseEntry.connectButton(self.browseTrajectory) self.trajectorySelectionLayout.addWidget(self.browseEntry, current_row, 1, alignment=qtc.Qt.AlignRight) current_row += 1 self.fromImageButton = qtw.QRadioButton("Load from Image") self.fromImageButton.clicked.connect(self.getScaleFromImage) self.sourceSelectionGroupButton.addButton(self.fromImageButton) self.trajectorySelectionLayout.addWidget(self.fromImageButton, current_row, 0, alignment=qtc.Qt.AlignLeft) self.processTrajectoryButton = qtw.QPushButton("PROCESS") self.processTrajectoryButton.clicked.connect(self.processTrajectory) self.processTrajectoryButton.setFixedWidth(150) self.trajectorySelectionLayout.addWidget(self.processTrajectoryButton, current_row, 1, alignment=qtc.Qt.AlignRight) # Display the widget self.trajectorySelectionWidget.setLayout( self.trajectorySelectionLayout) parentWidget.addWidget(self.trajectorySelectionWidget) # ---------------------------------------------------- # Generate the selection widgets to process the signal def createScaleSelection(self, parentWidget): # Generate the widget self.scaleSelectionWidget = qtw.QWidget() self.scaleSelectionLayout = qtw.QGridLayout(self.scaleSelectionWidget) current_row = 0 self.scaleSelectionLayout.addWidget(CLabel('Scale(s):'), current_row, 0, 1, 4) current_row += 1 self.scaleSelectionLayout.addWidget( qtw.QLabel('Space scale (px/unit):'), current_row, 0) self.spaceScaleEntry = qtw.QLineEdit() self.scaleSelectionLayout.addWidget(self.spaceScaleEntry, current_row, 1) self.scaleSelectionLayout.addWidget(qtw.QLabel('Time scale (FPS):'), current_row, 2) self.timeScaleEntry = qtw.QLineEdit() self.scaleSelectionLayout.addWidget(self.timeScaleEntry, current_row, 3) current_row += 1 self.scaleSelectionLayout.addWidget(qtw.QLabel('Space unit:'), current_row, 0) self.spaceUnitEntry = qtw.QLineEdit() self.scaleSelectionLayout.addWidget(self.spaceUnitEntry, current_row, 1) # Display the widget self.scaleSelectionWidget.setLayout(self.scaleSelectionLayout) parentWidget.addWidget(self.scaleSelectionWidget) # ---------------------------------- # Generate the display for the graph def createGraphDisplay(self, parentWidget): # Generate the widget self.plotGraphWidget = qtw.QWidget() self.plotGraphLayout = qtw.QVBoxLayout(self.plotGraphWidget) # Add the graph self.graphWidget = pg.PlotWidget() self.plotGraphLayout.addWidget(self.graphWidget) # Add the path selector self.pathSelectionEntry = CPathSelection() self.pathSelectionEntry.connectChange(self.updateGraph) self.plotGraphLayout.addWidget(self.pathSelectionEntry, alignment=qtc.Qt.AlignCenter) # Add the diffusivity display self.diffusivityValueWidget = qtw.QWidget() self.diffusivityValueLayout = qtw.QHBoxLayout( self.diffusivityValueWidget) self.diffusivityValueLayout.addWidget(CLabel('Diffusivity:')) self.diffusivityValueLabel = qtw.QLabel() self.diffusivityValueLayout.addWidget(self.diffusivityValueLabel, alignment=qtc.Qt.AlignLeft) self.diffusivityValueWidget.setLayout(self.diffusivityValueLayout) self.plotGraphLayout.addWidget(self.diffusivityValueWidget) # Add log checkbox self.logScaleCheckbox = qtw.QCheckBox('Log scale?') self.logScaleCheckbox.setChecked(True) self.logScaleCheckbox.clicked.connect(self.updateGraph) self.plotGraphLayout.addWidget(self.logScaleCheckbox, alignment=qtc.Qt.AlignLeft) # Display the widget self.plotGraphWidget.setLayout(self.plotGraphLayout) parentWidget.addWidget(self.plotGraphWidget) # ---------------------------------- # Generate the controls for the user def createUserActions(self, parentWidget): # Generate the widget self.userActionsWidget = qtw.QWidget() self.userActionsLayout = qtw.QHBoxLayout(self.userActionsWidget) # Add the button to open a new file self.saveButton = qtw.QPushButton("Save in File") self.saveButton.clicked.connect(self.saveData) self.saveButton.setStatusTip("Save the results in a file.") self.saveButton.setFixedWidth(150) self.saveButton.setEnabled(False) self.userActionsLayout.addWidget(self.saveButton, alignment=qtc.Qt.AlignLeft) # Add the button to close self.closeButton = qtw.QPushButton("Close") self.closeButton.clicked.connect(self.close) self.closeButton.setStatusTip("Close the current window.") self.closeButton.setFixedWidth(150) self.userActionsLayout.addWidget(self.closeButton, alignment=qtc.Qt.AlignRight) # Display the widget self.userActionsWidget.setLayout(self.userActionsLayout) parentWidget.addWidget(self.userActionsWidget)