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
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
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)
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)
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
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')
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()
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)
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)
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
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
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)
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_()
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
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)
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
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
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
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)
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
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