Пример #1
0
    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)
Пример #2
0
    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)
Пример #3
0
    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)
Пример #4
0
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)
Пример #5
0
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)
Пример #6
0
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)