示例#1
0
 def createDialog(self):
     print("")
     print("-------------------------")
     print("----- Create dialog -----")
     print("-------------------------")
     button = self.__options.checkedButton()
     mode = button.property("Mode")
     if mode == Mode.DEFAULT_FILEDIALOG:
         dialog = qt.QFileDialog(self)
         dialog.setAcceptMode(qt.QFileDialog.AcceptOpen)
     elif mode == Mode.IMAGEFILEDIALOG:
         dialog = ImageFileDialog(self)
     elif mode == Mode.DATAFILEDIALOG:
         dialog = DataFileDialog(self)
     elif mode == Mode.DATAFILEDIALOG_DATASET:
         dialog = DataFileDialog(self)
         dialog.setFilterMode(DataFileDialog.FilterMode.ExistingDataset)
     elif mode == Mode.DATAFILEDIALOG_GROUP:
         dialog = DataFileDialog(self)
         dialog.setFilterMode(DataFileDialog.FilterMode.ExistingGroup)
     elif mode == Mode.DATAFILEDIALOG_NXENTRY:
         def customFilter(obj):
             if "NX_class" in obj.attrs:
                 return obj.attrs["NX_class"] in [b"NXentry", u"NXentry"]
             return False
         dialog = DataFileDialog(self)
         dialog.setFilterMode(DataFileDialog.FilterMode.ExistingGroup)
         dialog.setFilterCallback(customFilter)
     else:
         assert(False)
     return dialog
示例#2
0
    def createFileDialog(self):
        dialog = qt.QFileDialog(self)
        dialog.setWindowTitle("Open")
        dialog.setModal(True)

        # NOTE: hdf5plugin have to be loaded before
        extensions = collections.OrderedDict()
        for description, ext in silx.io.supported_extensions().items():
            extensions[description] = " ".join(sorted(list(ext)))

        # Add extensions supported by fabio
        extensions["NeXus layout from EDF files"] = "*.edf"
        extensions["NeXus layout from TIFF image files"] = "*.tif *.tiff"
        extensions["NeXus layout from CBF files"] = "*.cbf"
        extensions["NeXus layout from MarCCD image files"] = "*.mccd"

        all_supported_extensions = set()
        for name, exts in extensions.items():
            exts = exts.split(" ")
            all_supported_extensions.update(exts)
        all_supported_extensions = sorted(list(all_supported_extensions))

        filters = []
        filters.append("All supported files (%s)" % " ".join(all_supported_extensions))
        for name, extension in extensions.items():
            filters.append("%s (%s)" % (name, extension))
        filters.append("All files (*)")

        dialog.setNameFilters(filters)
        dialog.setFileMode(qt.QFileDialog.ExistingFiles)
        return dialog
示例#3
0
    def __savePoni(self):
        dialog = qt.QFileDialog(self)
        dialog.setWindowTitle("Save poni file")
        dialog.setModal(True)
        dialog.setAcceptMode(qt.QFileDialog.AcceptSave)

        builder = FilterBuilder.FilterBuilder()
        builder.addFileFormat("PONI files", "poni")
        #         builder.addFileFormat("JSON files", "json")
        dialog.setNameFilters(builder.getFilters())

        result = dialog.exec_()
        if not result:
            return

        filename = dialog.selectedFiles()[0]
        config = self.getConfig()
        if config.get("wavelength") is None:
            config.pop("wavelength")
        from ...detectors import detector_factory
        detector = detector_factory(config.get("detector"),
                                    config.get("detector_config"))
        from ...geometry import Geometry
        ai = Geometry(detector=detector)
        ai.set_config(config)
        ai.save(filename)
示例#4
0
    def _triggered(self, checked=False):
        """Action triggered callback"""
        plot3d = self.getPlot3DWidget()
        if plot3d is None:
            _logger.warning(
                'Ignoring action triggered without Plot3DWidget set')
            return

        dialog = qt.QFileDialog(parent=plot3d)
        dialog.setWindowTitle('Save video as...')
        dialog.setModal(True)
        dialog.setNameFilters([self.PNG_SERIE_FILTER, self.MNG_FILTER])
        dialog.setFileMode(dialog.AnyFile)
        dialog.setAcceptMode(dialog.AcceptSave)

        if not dialog.exec_():
            return

        nameFilter = dialog.selectedNameFilter()
        filename = dialog.selectedFiles()[0]

        # Forces the filename extension to match the chosen filter
        extension = nameFilter.split()[-1][2:-1]
        if (len(filename) <= len(extension)
                or filename[-len(extension):].lower() != extension.lower()):
            filename += extension

        nbFrames = int(4. * 25)  # 4 seconds, 25 fps

        if nameFilter == self.PNG_SERIE_FILTER:
            self._saveAsPNGSerie(filename, nbFrames)
        elif nameFilter == self.MNG_FILTER:
            self._saveAsMNG(filename, nbFrames)
        else:
            _logger.error('Unsupported file filter: %s', nameFilter)
示例#5
0
    def createFileDialog(self):
        dialog = qt.QFileDialog(self)
        dialog.setWindowTitle("Open")
        dialog.setModal(True)

        extensions = collections.OrderedDict()
        # expect h5py
        extensions["HDF5 files"] = "*.h5 *.hdf"
        extensions["NeXus files"] = "*.nx *.nxs *.h5 *.hdf"
        # no dependancy
        extensions["NeXus layout from spec files"] = "*.dat *.spec *.mca"
        extensions["Numpy binary files"] = "*.npz *.npy"
        # expect fabio
        extensions[
            "NeXus layout from raster images"] = "*.edf *.tif *.tiff *.cbf *.mccd"
        extensions["NeXus layout from EDF files"] = "*.edf"
        extensions["NeXus layout from TIFF image files"] = "*.tif *.tiff"
        extensions["NeXus layout from CBF files"] = "*.cbf"
        extensions["NeXus layout from MarCCD image files"] = "*.mccd"

        filters = []
        filters.append("All supported files (%s)" %
                       " ".join(extensions.values()))
        for name, extension in extensions.items():
            filters.append("%s (%s)" % (name, extension))
        filters.append("All files (*)")

        dialog.setNameFilters(filters)
        dialog.setFileMode(qt.QFileDialog.ExistingFiles)
        return dialog
示例#6
0
    def _triggered(self, checked=False):
        plot3d = self.getPlot3DWidget()
        if plot3d is None:
            _logger.error('Cannot save widget, no associated Plot3DWidget')
        else:
            dialog = qt.QFileDialog(self.parent())
            dialog.setWindowTitle('Save snapshot as')
            dialog.setModal(True)
            dialog.setNameFilters(('Plot3D Snapshot PNG (*.png)',
                                   'Plot3D Snapshot JPEG (*.jpg)'))

            dialog.setFileMode(qt.QFileDialog.AnyFile)
            dialog.setAcceptMode(qt.QFileDialog.AcceptSave)

            if not dialog.exec_():
                return

            nameFilter = dialog.selectedNameFilter()
            filename = dialog.selectedFiles()[0]
            dialog.close()

            # Forces the filename extension to match the chosen filter
            extension = nameFilter.split()[-1][2:-1]
            if (len(filename) <= len(extension) or
                    filename[-len(extension):].lower() != extension.lower()):
                filename += extension

            image = plot3d.grabGL()
            if not image.save(filename):
                _logger.error('Failed to save image as %s', filename)
                qt.QMessageBox.critical(self.parent(), 'Save snapshot as',
                                        'Failed to save snapshot')
示例#7
0
    def processData(config=None):
        center = window.geometry().center()
        input_data = window.input_data
        while input_data is None or len(input_data) == 0:
            dialog = qt.QFileDialog(directory=os.getcwd())
            dialog.setWindowTitle("Select images to integrate")

            from pyFAI.gui.utils import FilterBuilder
            builder = FilterBuilder.FilterBuilder()
            builder.addImageFormat("EDF image files", "edf")
            builder.addImageFormat("TIFF image files", "tif tiff")
            builder.addImageFormat("NumPy binary files", "npy")
            builder.addImageFormat("CBF files", "cbf")
            builder.addImageFormat("MarCCD image files", "mccd")
            builder.addImageFormat("HDF5 image stack", "h5 hdf5 nxs")
            dialog.setNameFilters(builder.getFilters())

            dialog.setFileMode(qt.QFileDialog.ExistingFiles)
            moveCenterTo(dialog, center)
            result = dialog.exec_()
            if not result:
                return
            input_data = [str(i) for i in dialog.selectedFiles()]
            center = dialog.geometry().center()
            dialog.close()

        window.setVisible(False)
        window.deleteLater()

        if config is None:
            config = window.get_config()

        dialog = IntegrationProcess(None)
        dialog.adjustSize()
        moveCenterTo(dialog, center)

        class QtProcess(qt.QThread):
            def run(self):
                observer = dialog.createObserver(qtSafe=True)
                process(input_data,
                        window.output_path,
                        config,
                        options.monitor_key,
                        observer,
                        options.write_mode,
                        format_=options.format.lower())

        qtProcess = QtProcess()
        qtProcess.start()

        result = dialog.exec_()
        if result:
            qt.QMessageBox.information(dialog, "Integration",
                                       "Batch processing completed.")
        else:
            qt.QMessageBox.information(dialog, "Integration",
                                       "Batch processing interrupted.")
        dialog.deleteLater()
示例#8
0
 def openDirectory():
     self.datDir = self.u.tB_Directory.toPlainText()
     dat_dir = os.environ["HOME"]
     if self.datDir != "" and os.path.isdir(self.datDir):
         dat_dir = self.datDir
     FO_dialog = qt.QFileDialog()
     directory = FO_dialog.getExistingDirectory(
         None, caption="Select a directory", directory=dat_dir)
     if directory:
         self.u.tB_Directory.clear()
         self.u.tB_Directory.append(directory)
示例#9
0
 def __export(self):
     fitItem = h5NodeToProjectItem(self.node)
     workdir = fitItem.projectRoot().workdir
     itemBasename = os.path.basename(fitItem.fitFile).rsplit('.')[0]
     itemBasename += '.txt'
     dialog = Qt.QFileDialog(self, 'Export fit results.')
     dialog.setFileMode(Qt.QFileDialog.AnyFile)
     dialog.setAcceptMode(Qt.QFileDialog.AcceptSave)
     dialog.selectFile(os.path.join(workdir, itemBasename))
     if dialog.exec_():
         csvPath = dialog.selectedFiles()[0]
         fitItem.fitH5.export_csv(fitItem.fitH5.entries()[0], csvPath)
示例#10
0
    def _actionTriggered(self, checked=False):
        """Handle save action."""
        # Set-up filters
        filters = []

        # Add image filters if there is an active image
        if self.plot.getActiveImage() is not None:
            filters.extend(self.IMAGE_FILTERS)

        # Add curve filters if there is a curve to save
        if (self.plot.getActiveCurve() is not None
                or len(self.plot.getAllCurves()) == 1):
            filters.extend(self.CURVE_FILTERS)
        if len(self.plot.getAllCurves()) > 1:
            filters.extend(self.ALL_CURVES_FILTERS)

        filters.extend(self.SNAPSHOT_FILTERS)

        # Create and run File dialog
        dialog = qt.QFileDialog(self.plot)
        dialog.setWindowTitle("Output File Selection")
        dialog.setModal(1)
        dialog.setNameFilters(filters)

        dialog.setFileMode(dialog.AnyFile)
        dialog.setAcceptMode(dialog.AcceptSave)

        if not dialog.exec_():
            return False

        nameFilter = dialog.selectedNameFilter()
        filename = dialog.selectedFiles()[0]
        dialog.close()

        # Forces the filename extension to match the chosen filter
        extension = nameFilter.split()[-1][2:-1]
        if (len(filename) <= len(extension)
                or filename[-len(extension):].lower() != extension.lower()):
            filename += extension

        # Handle save
        if nameFilter in self.SNAPSHOT_FILTERS:
            return self._saveSnapshot(filename, nameFilter)
        elif nameFilter in self.CURVE_FILTERS:
            return self._saveCurve(filename, nameFilter)
        elif nameFilter in self.ALL_CURVES_FILTERS:
            return self._saveCurves(filename, nameFilter)
        elif nameFilter in self.IMAGE_FILTERS:
            return self._saveImage(filename, nameFilter)
        else:
            _logger.warning('Unsupported file filter: %s', nameFilter)
            return False
示例#11
0
    def __createLoadPeakDialog(self):
        dialog = qt.QFileDialog(self)
        dialog.setWindowTitle("Load peaks")
        dialog.setModal(True)

        extensions = OrderedDict()
        extensions["Control point files"] = "*.npt"

        filters = []
        for name, extension in extensions.items():
            filters.append("%s (%s)" % (name, extension))

        dialog.setNameFilters(filters)
        return dialog
示例#12
0
    def __init__(self,
                 parent=None,
                 fileMode=None,
                 options=None,
                 appendPath=None,
                 noLabel=False,
                 **kwargs):
        """
        Extra arguments are passed to the QFileDialog constructor
        :param parent Qt.QWidget:
        :param fileMode Qt.QFileDialog.FileMode:
        :param options Qt.QFileDialog.Options:
        :param noLabel bool: Set to True to remove the label in front of the
            line edit.
        :param kwargs: Keyword arguments passed to the QFileDialog constructor.
        """
        super(FileChooser, self).__init__(parent)

        self.__selectedPath = None
        self.__appendPath = appendPath

        layout = Qt.QHBoxLayout(self)
        layout.setContentsMargins(0, 0, 0, 0)

        lineEdit = StyledLineEdit()
        lineEdit.setAlignment(Qt.Qt.AlignLeft)
        lineEdit.setReadOnly(True)

        pickButton = Qt.QToolButton()
        style = Qt.QApplication.style()
        icon = style.standardIcon(Qt.QStyle.SP_DialogOpenButton)
        pickButton.setIcon(icon)

        if not noLabel:
            label = Qt.QLabel('Path :')
            layout.addWidget(label)

        layout.addWidget(lineEdit)
        layout.addWidget(pickButton)

        pickButton.clicked.connect(self.__pickFile)

        self.__fileDialog = dialog = Qt.QFileDialog(**kwargs)

        if fileMode is not None:
            dialog.setFileMode(fileMode)

        if options is not None:
            dialog.setOptions(options)
示例#13
0
def integrate_gui(options, args):
    from silx.gui import qt
    from pyFAI.gui.integrate_widget import AIWidget

    app = qt.QApplication([])
    if not args:
        dialog = qt.QFileDialog(directory=os.getcwd())
        dialog.setFileMode(qt.QFileDialog.ExistingFiles)
        dialog.exec_()
        args = [str(i) for i in dialog.selectedFiles()]

    window = AIWidget(args, options.output, options.format, options.slow,
                      options.rapid, options.json)
    window.set_input_data(args)
    window.show()
    return app.exec_()
示例#14
0
    def createSplineDialog(self, title):
        dialog = qt.QFileDialog(self)
        dialog.setWindowTitle(title)
        dialog.setModal(True)

        extensions = OrderedDict()
        extensions["Spline files"] = "*.spline"

        filters = []
        filters.append("All supported files (%s)" %
                       " ".join(extensions.values()))
        for name, extension in extensions.items():
            filters.append("%s (%s)" % (name, extension))
        filters.append("All files (*)")

        dialog.setNameFilters(filters)
        dialog.setFileMode(qt.QFileDialog.ExistingFile)
        return dialog
示例#15
0
    def __save2DTriggered(self):
        # TODO : support more that one curve
        if not self.__values:
            return
        if len(self.__values) > 1:
            raise ValueError('Export : only one 2D scatter plot '
                             'supported at the moment.')
        legend = self.__values.keys()[0]
        values = self.__values[legend][0]
        curve = self.getCurve(legend)
        x, y = curve[0:2]

        xlabel = curve[4]['xlabel']
        if xlabel is None:
            xlabel = self.getGraphXLabel()
        ylabel = curve[4]['ylabel']
        if ylabel is None:
            ylabel = self.getGraphYLabel()

        dialog = Qt.QFileDialog(self)
        dialog.setWindowTitle("Output File Selection")
        dialog.setModal(True)
        dialog.setNameFilters(['Curve as Raw ASCII (*.txt)'])

        dialog.setFileMode(dialog.AnyFile)
        dialog.setAcceptMode(dialog.AcceptSave)

        if not dialog.exec_():
            return False

        # nameFilter = dialog.selectedNameFilter()
        filename = dialog.selectedFiles()[0]
        dialog.close()

        stack = np.vstack((x, y, values)).transpose()

        delimiter = ";"
        header = '{col0} {delimiter} {col1} {delimiter} {col2}'\
                 '\n'.format(col0=xlabel,
                             col1=ylabel,
                             col2='values',
                             delimiter=delimiter)
        savetxt(filename, stack, header=header, delimiter=delimiter)
示例#16
0
    def createFileDialog(self, parent, previousFile=None):
        """Create a file dialog configured with a default path.

        :rtype: qt.QFileDialog
        """
        dialog = qt.QFileDialog(parent)
        dialog.finished.connect(
            functools.partial(self.__saveDialogState, dialog))
        self.__configureDialog(dialog)

        if previousFile is not None:
            if os.path.exists(previousFile):
                if os.path.isdir(previousFile):
                    directory = previousFile
                else:
                    directory = os.path.dirname(previousFile)
                dialog.setDirectory(directory)

        return dialog
示例#17
0
    def getOpenFileName(self, title):
        """Display a dialog to select a filename and return it.

        Returns None if nothing selected.

        This code is compatible PyQt4/PyQt5 which is not the case for static
        functions provided by `qt.QFileDialog`.
        """
        dialog = qt.QFileDialog(self)
        dialog.setWindowTitle(title)
        dialog.setModal(True)
        dialog.setFileMode(qt.QFileDialog.ExistingFile)

        result = dialog.exec_()
        if not result:
            return None

        filename = dialog.selectedFiles()[0]
        return filename
示例#18
0
    def createSaveDialog(self, title, poni=False, json=False):
        dialog = qt.QFileDialog(self)
        dialog.setWindowTitle(title)
        dialog.setModal(True)
        dialog.setAcceptMode(qt.QFileDialog.AcceptSave)

        extensions = OrderedDict()
        if poni:
            extensions["PONI files"] = "*.poni"
        if json:
            extensions["JSON files"] = "*.json"

        filters = []
        filters.append("All supported files (%s)" %
                       " ".join(extensions.values()))
        for name, extension in extensions.items():
            filters.append("%s (%s)" % (name, extension))
        filters.append("All files (*)")

        dialog.setNameFilters(filters)
        return dialog
示例#19
0
    def __selectFile(self):
        dialog = qt.QFileDialog(self)
        dialog.setWindowTitle("Open a poni file")
        dialog.setModal(True)
        dialog.setAcceptMode(qt.QFileDialog.AcceptOpen)

        builder = FilterBuilder.FilterBuilder()
        builder.addFileFormat("PONI files", "poni")
        builder.addFileFormat("JSON files", "json")
        dialog.setNameFilters(builder.getFilters())

        result = dialog.exec_()
        if not result:
            return

        filename = dialog.selectedFiles()[0]
        if filename.endswith(".json"):
            self.loadFromJsonFile(filename)
        elif filename.endswith(".poni"):
            self.loadFromPoniFile(filename)
        else:
            logger.error("File %s unsupported", filename)
示例#20
0
    def createImageDialog(self, title, forMask=False):
        dialog = qt.QFileDialog(self)
        dialog.setWindowTitle(title)
        dialog.setModal(True)

        extensions = OrderedDict()
        extensions["EDF image files"] = "*.edf"
        extensions["TIFF image files"] = "*.tif *.tiff"
        extensions["NumPy binary files"] = "*.npy"
        extensions["CBF files"] = "*.cbf"
        extensions["MarCCD image files"] = "*.mccd"
        if forMask:
            extensions["Fit2D mask files"] = "*.msk"

        filters = []
        filters.append("All supported files (%s)" %
                       " ".join(extensions.values()))
        for name, extension in extensions.items():
            filters.append("%s (%s)" % (name, extension))
        filters.append("All files (*)")

        dialog.setNameFilters(filters)
        dialog.setFileMode(qt.QFileDialog.ExistingFile)
        return dialog
示例#21
0
    def _actionTriggered(self, checked=False):
        """Handle save action."""
        # Set-up filters
        filters = OrderedDict()

        # Add image filters if there is an active image
        if self.plot.getActiveImage() is not None:
            filters.update(self._filters['image'].items())

        # Add curve filters if there is a curve to save
        if (self.plot.getActiveCurve() is not None or
                len(self.plot.getAllCurves()) == 1):
            filters.update(self._filters['curve'].items())
        if len(self.plot.getAllCurves()) >= 1:
            filters.update(self._filters['curves'].items())

        # Add scatter filters if there is a scatter
        # todo: CSV
        if self.plot.getScatter() is not None:
            filters.update(self._filters['scatter'].items())

        filters.update(self._filters['all'].items())

        # Create and run File dialog
        dialog = qt.QFileDialog(self.plot)
        dialog.setOption(dialog.DontUseNativeDialog)
        dialog.setWindowTitle("Output File Selection")
        dialog.setModal(1)
        dialog.setNameFilters(list(filters.keys()))

        dialog.setFileMode(dialog.AnyFile)
        dialog.setAcceptMode(dialog.AcceptSave)

        def onFilterSelection(filt_):
            # disable overwrite confirmation for NXdata types,
            # because we append the data to existing files
            if filt_ in self.DEFAULT_APPEND_FILTERS:
                dialog.setOption(dialog.DontConfirmOverwrite)
            else:
                dialog.setOption(dialog.DontConfirmOverwrite, False)

        dialog.filterSelected.connect(onFilterSelection)

        if not dialog.exec_():
            return False

        nameFilter = dialog.selectedNameFilter()
        filename = dialog.selectedFiles()[0]
        dialog.close()

        if '(' in nameFilter and ')' == nameFilter.strip()[-1]:
            # Check for correct file extension
            # Extract file extensions as .something
            extensions = [ext[ext.find('.'):] for ext in
                          nameFilter[nameFilter.find('(')+1:-1].split()]
            for ext in extensions:
                if (len(filename) > len(ext) and
                        filename[-len(ext):].lower() == ext.lower()):
                    break
            else:  # filename has no extension supported in nameFilter, add one
                if len(extensions) >= 1:
                    filename += extensions[0]

        # Handle save
        func = filters.get(nameFilter, None)
        if func is not None:
            return func(self.plot, filename, nameFilter)
        else:
            _logger.error('Unsupported file filter: %s', nameFilter)
            return False