def execute(self): settings = QSettings() lastDir = settings.value('Processing/lastScriptsDir', '') filenames, selected_filter = QFileDialog.getOpenFileNames(self.toolbox, self.tr('Script files', 'AddScriptFromFileAction'), lastDir, self.tr('Script files (*.py *.PY)', 'AddScriptFromFileAction')) if filenames: validAlgs = 0 wrongAlgs = [] for filename in filenames: try: settings.setValue('Processing/lastScriptsDir', QFileInfo(filename).absoluteDir().absolutePath()) script = ScriptAlgorithm(filename) destFilename = os.path.join(ScriptUtils.scriptsFolders()[0], os.path.basename(filename)) with open(destFilename, 'w') as f: f.write(script.script) validAlgs += 1 except WrongScriptException: wrongAlgs.append(os.path.basename(filename)) if validAlgs: algList.reloadProvider('script') if wrongAlgs: QMessageBox.warning(self.toolbox, self.tr('Error reading scripts', 'AddScriptFromFileAction'), self.tr('The following files do not contain a valid script:\n-', 'AddScriptFromFileAction') + "\n-".join(wrongAlgs))
def getOpenFileNames(self, parent=None, caption='', filter='', selectedFilter=None, useEncoding=False): if useEncoding: return self.getDialog(parent, caption, QFileDialog.AcceptOpen, QFileDialog.ExistingFiles, filter, selectedFilter, useEncoding) res, selected_filter = QFileDialog.getOpenFileNames(parent, caption, getLastUsedDir(), filter) if len(res) > 0: setLastUsedDir(res[-1]) return res
def showSelectionDialog(self): # Find the file dialog's working directory settings = QSettings() text = self.leText.text() if os.path.isdir(text): path = text elif os.path.isdir(os.path.dirname(text)): path = os.path.dirname(text) elif settings.contains('/Processing/LastInputPath'): path = settings.value('/Processing/LastInputPath') else: path = '' if self.isFolder: folder = QFileDialog.getExistingDirectory(self, self.tr('Select folder'), path) if folder: self.leText.setText(folder) settings.setValue('/Processing/LastInputPath', os.path.dirname(folder)) else: filenames, selected_filter = QFileDialog.getOpenFileNames(self, self.tr('Select file'), path, '*.' + self.ext) if filenames: self.leText.setText(u';'.join(filenames)) settings.setValue('/Processing/LastInputPath', os.path.dirname(filenames[0]))
def showFileSelectionDialog(self): settings = QSettings() text = str(self.text.text()) if os.path.isdir(text): path = text elif os.path.isdir(os.path.dirname(text)): path = os.path.dirname(text) elif settings.contains('/Processing/LastInputPath'): path = str(settings.value('/Processing/LastInputPath')) else: path = '' ret, selected_filter = QFileDialog.getOpenFileNames(self, self.tr('Open file'), path, self.tr('All files(*.*);;') + self.param.getFileFilter()) if ret: files = list(ret) settings.setValue('/Processing/LastInputPath', os.path.dirname(str(files[0]))) for i, filename in enumerate(files): files[i] = dataobjects.getRasterSublayer(filename, self.param) if len(files) == 1: self.text.setText(files[0]) self.textEditingFinished() else: if isinstance(self.param, ParameterMultipleInput): self.text.setText(';'.join(str(f) for f in files)) else: rowdif = len(files) - (self._table().rowCount() - self.row) for i in range(rowdif): self._panel().addRow() for i, f in enumerate(files): self._table().cellWidget(i + self.row, self.col).setValue(f)
def showFileDialog(self, seldir): settings = QgsSettings() text = str(self.text.text()) if os.path.isdir(text): path = text elif not seldir and os.path.isdir(os.path.dirname(text)): path = os.path.dirname(text) elif settings.contains('/Processing/LastInputPath'): path = str(settings.value('/Processing/LastInputPath')) else: path = '' if not seldir: ret, selected_filter = QFileDialog.getOpenFileNames( self, self.tr('Select Files'), path, getFileFilter(self.param) ) else: ret = QFileDialog.getExistingDirectory(self, self.tr('Select Directory'), path) if ret: if seldir: settings.setValue('/Processing/LastInputPath', ret) files = [] for pp in Path(ret).rglob("*"): if not pp.is_file(): continue p = pp.as_posix() if ((isinstance(self.param, QgsProcessingParameterRasterLayer) or (isinstance(self.param, QgsProcessingParameterMultipleLayers) and self.param.layerType() == QgsProcessing.TypeRaster)) and not QgsRasterLayer.isValidRasterFileName(p)): continue files.append(p) if not files: return else: files = list(ret) settings.setValue('/Processing/LastInputPath', os.path.dirname(str(files[0]))) for i, filename in enumerate(files): files[i] = dataobjects.getRasterSublayer(filename, self.param) if len(files) == 1: self.text.setText(files[0]) self.textEditingFinished() else: if isinstance(self.param, QgsProcessingParameterMultipleLayers): self.text.setText(';'.join(str(f) for f in files)) else: rowdif = len(files) - (self._table().rowCount() - self.row) for i in range(rowdif): self._panel().addRow() for i, f in enumerate(files): self._table().cellWidget(i + self.row, self.col).setValue(f)
def addFiles(self): filter = self.getFileFilter(self.datatype) settings = QgsSettings() path = str(settings.value('/Processing/LastInputPath')) ret, selected_filter = QFileDialog.getOpenFileNames(self, self.tr('Select file(s)'), path, filter) if ret: files = list(ret) settings.setValue('/Processing/LastInputPath', os.path.dirname(str(files[0]))) for filename in files: item = QStandardItem(filename) item.setData(filename, Qt.UserRole) item.setCheckState(Qt.Checked) item.setCheckable(True) self.model.appendRow(item)
def addFiles(self): filter = self.getFileFilter(self.datatype) settings = QgsSettings() path = str(settings.value('/Processing/LastInputPath')) ret, selected_filter = QFileDialog.getOpenFileNames( self, self.tr('Select File(s)'), path, filter) if ret: files = list(ret) settings.setValue('/Processing/LastInputPath', os.path.dirname(str(files[0]))) for filename in files: item = QStandardItem(filename) item.setData(filename, Qt.UserRole) item.setCheckState(Qt.Checked) item.setCheckable(True) item.setDropEnabled(False) self.model.appendRow(item)
def openScriptFile(self): lastDirPath = self.settings.value("pythonConsole/lastDirPath", QDir.homePath()) openFileTr = QCoreApplication.translate("PythonConsole", "Open File") fileList, selected_filter = QFileDialog.getOpenFileNames( self, openFileTr, lastDirPath, "Script file (*.py)") if fileList: for pyFile in fileList: for i in range(self.tabEditorWidget.count()): tabWidget = self.tabEditorWidget.widget(i) if tabWidget.path == pyFile: self.tabEditorWidget.setCurrentWidget(tabWidget) break else: tabName = QFileInfo(pyFile).fileName() self.tabEditorWidget.newTabEditor(tabName, pyFile) lastDirPath = QFileInfo(pyFile).path() self.settings.setValue("pythonConsole/lastDirPath", pyFile) self.updateTabListScript(pyFile, action='append')
def openScriptFile(self): lastDirPath = self.settings.value("pythonConsole/lastDirPath", QDir.homePath()) openFileTr = QCoreApplication.translate("PythonConsole", "Open File") fileList, selected_filter = QFileDialog.getOpenFileNames( self, openFileTr, lastDirPath, "Script file (*.py)") if fileList: for pyFile in fileList: for i in range(self.tabEditorWidget.count()): tabWidget = self.tabEditorWidget.widget(i) if tabWidget.path == pyFile: self.tabEditorWidget.setCurrentWidget(tabWidget) break else: tabName = QFileInfo(pyFile).fileName() self.tabEditorWidget.newTabEditor(tabName, pyFile) lastDirPath = QFileInfo(pyFile).path() self.settings.setValue("pythonConsole/lastDirPath", pyFile) self.updateTabListScript(pyFile, action='append')
def addFile(self): settings = QSettings() if settings.contains('/Processing/LastInputPath'): path = settings.value('/Processing/LastInputPath') else: path = '' files, selected_filter = QFileDialog.getOpenFileNames( self, self.tr('Select file(s)'), path, self.tr('All files (*.*)')) if len(files) == 0: return model = self.lstLayers.model() for filePath in files: item = QStandardItem(filePath) model.appendRow(item) settings.setValue('/Processing/LastInputPath', os.path.dirname(files[0]))
def addFile(self): settings = QgsSettings() if settings.contains('/Processing/LastInputPath'): path = settings.value('/Processing/LastInputPath') else: path = '' files, selected_filter = QFileDialog.getOpenFileNames(self, self.tr('Select File(s)'), path, self.tr('All files (*.*)')) if len(files) == 0: return model = self.lstLayers.model() for filePath in files: item = QStandardItem(filePath) model.appendRow(item) settings.setValue('/Processing/LastInputPath', os.path.dirname(files[0]))
def do_import_files_action(self): if self.tm.countActiveTasks() > 0: push_info(("Veuillez patienter jusqu'à ce que l'importation " "soit terminée.")) return file_dialog = QFileDialog() title = 'Importer' path = self.settings.value('data_import_directory') files = QFileDialog.getOpenFileNames( file_dialog, title, path, "Data file (*.A?? *.aV? *.I?? *.V?? *.txt)")[0] self.tm.allTasksFinished.connect( partial(self.all_tasks_finished, 'import')) tasks = [] for file_path in files: tasks.append(self.import_file(file_path)) for t in tasks: self.tm.addTask(t)
def _on_add_supporting_document(self): # Slot raised when the user select to add a supporting document if self.count == 0: return select = self.tr('Select') supporting_docs_str = 'Supporting Documents' title = '{0} {1} {2}'.format(select, self.current_document_type(), supporting_docs_str) filter_str = '{0} (*.jpg *.jpeg *.png *.bmp *.tiff *.svg *.pdf)'.format( supporting_docs_str) # Get last path for supporting documents last_path = last_document_path() if last_path is None: last_path = '/home' else: dir = QDir(last_path) if not dir.exists(): last_path = '/home' source_docs, _ = QFileDialog.getOpenFileNames(self, title, last_path, filter_str) doc_type_id = self._cbo_doc_type.itemData( self._cbo_doc_type.currentIndex()) parent_entity = self._entity_supporting_doc.parent_entity for doc in source_docs: self.source_document_manager.insertDocumentFromFile( doc, doc_type_id, parent_entity) # Set last path if len(source_docs) > 0: doc = source_docs[0] fi = QFileInfo(doc) dir_path = fi.absolutePath() set_last_document_path(dir_path)
def registerModel(self, modelPath=None): """ Registers a model to the model runner. This application register all new models to a default directory. :param modelPath: (str) path to the model to be registered. """ if modelPath is None or not isinstance(modelPath, str): fd = QFileDialog() modelPathList = fd.getOpenFileNames( caption=self.tr('Select a QGIS processing model to be added'), filter=self.tr('QGIS Processing Model (*.model *.model3)') ) modelPathList = modelPathList[0] if modelPathList else modelPathList if modelPathList == []: return msg = self.tr( "Model seems to be already registered, would you like to overwrite" " it?" ) for modelPath in modelPathList: modelName = os.path.basename(modelPath) if self.modelExists(modelName) and not self.confirmAction(msg): QgsMessageLog.logMessage( self.tr("Model {model} was not imported.").format(model=modelName), 'DSGTools Plugin', Qgis.Info ) return dest = os.path.join(self.defaultModelPath(), modelName) copy(modelPath, dest) if os.path.exists(dest): self.modelComboBox.addItem(modelName) self._newModels.append(dest) self.setActiveModel(modelName) self.modelAdded.emit(modelName) QgsMessageLog.logMessage( self.tr("Model {model} imported to {dest}.").format(model=modelName, dest=dest), 'DSGTools Plugin', Qgis.Info )
def get_file_dialog(self, dialog, widget): """ Get file dialog """ # Check if selected file exists. Set default value if necessary file_path = utils_giswater.getWidgetText(dialog, widget) if file_path is None or file_path == 'null' or not os.path.exists(str(file_path)): folder_path = self.plugin_dir else: folder_path = os.path.dirname(file_path) # Open dialog to select file os.chdir(folder_path) file_dialog = QFileDialog() file_dialog.setFileMode(QFileDialog.AnyFile) message = "Select file" files_path, filter_ = file_dialog.getOpenFileNames(parent=None, caption=self.controller.tr(message)) file_text = "" for file in files_path: file_text += f"{file}\n\n" if files_path: utils_giswater.setWidgetText(dialog, widget, str(file_text)) return files_path
def execute(self): settings = QgsSettings() lastDir = settings.value("processing/lastScriptsDir", "") files, _ = QFileDialog.getOpenFileNames(self.toolbox, self.tr("Add script(s)"), lastDir, self.tr("Processing scripts (*.py *.PY)")) if files: settings.setValue("processing/lastScriptsDir", os.path.dirname(files[0])) valid = 0 for f in files: try: shutil.copy(f, ScriptUtils.scriptsFolders()[0]) valid += 1 except OSError as e: QgsMessageLog.logMessage(self.tr("Could not copy script '{}'\n{}").format(f, str(e)), "Processing", Qgis.Warning) if valid > 0: QgsApplication.processingRegistry().providerById("script").refreshAlgorithms()
def execute(self): settings = QgsSettings() lastDir = settings.value("processing/lastScriptsDir", "") files, _ = QFileDialog.getOpenFileNames(self.toolbox, self.tr("Add script(s)"), lastDir, self.tr("Processing scripts (*.py *.PY)")) if files: settings.setValue("processing/lastScriptsDir", os.path.dirname(files[0])) valid = 0 for f in files: try: shutil.copy(f, ScriptUtils.scriptsFolders()[0]) valid += 1 except OSError as e: QgsMessageLog.logMessage(self.tr("Could not copy script '{}'\n{}").format(f, str(e)), "Processing", Qgis.Warning) if valid > 0: QgsApplication.processingRegistry().providerById("script").refreshAlgorithms()
def askForFiles(parent, msg=None, isSave=False, allowMultiple=False, exts="*"): ''' dialog for save or load files ''' msg = msg or 'Select file' caller = _callerName().split(".") name = "/".join(["LAST_PATH", caller[-1]]) namespace = caller[0] path = pluginSetting(name, namespace) f = None if not isinstance(exts, list): exts = [exts] extString = ";; ".join([ " %s files (*.%s *.%s)" % (e.upper(), e, e.upper()) if e != "*" else "All files (*.*)" for e in exts ]) dlg = QFileDialog() if allowMultiple: ret = dlg.getOpenFileNames(parent, msg, path, '*.' + extString) if ret: f = ret[0] else: f = ret = None else: if isSave: ret = dlg.getSaveFileName(parent, msg, path, extString) or None if ret[0] != "": name, ext = os.path.splitext(ret[0]) if not ext: ret[0] += "." + exts[0] # Default extension else: ret = dlg.getOpenFileName(parent, msg, path, extString) or None f = ret if f is not None: setPluginSetting(name, os.path.dirname(f[0]), namespace) return ret
def showFileSelectionDialog(self): settings = QgsSettings() if settings.contains('/Processing/LastInputPath'): path = str(settings.value('/Processing/LastInputPath')) else: path = QDir.homePath() files, selected_filter = QFileDialog.getOpenFileNames( self, self.tr('Select Files'), path, self.parameterDefinition.createFileFilter()) if not files: return settings.setValue('/Processing/LastInputPath', os.path.dirname(str(files[0]))) context = dataobjects.createContext() first_row = self.panel.batchRowCount( ) if self.panel.batchRowCount() > 1 else 0 for row, file in enumerate(files): self.setRowValue(first_row + row, file, context)
def select_and_copy_files_to_ipt_dir(self): """ Open a file browser pointing to the most recently browsed directory, where multiple files can be selected. The selected files will be copied inside the ipt_dir """ try: default_dir = QSettings().value('irmt/ipt_browsed_dir', QDir.homePath()) text = 'The selected files will be copied to the ipt directory' file_paths, __ = QFileDialog.getOpenFileNames( self.parent().parent(), text, default_dir) if not file_paths: return {'ret': 1, 'reason': 'No file was selected'} selected_dir = QFileInfo(file_paths[0]).dir().path() QSettings().setValue('irmt/ipt_browsed_dir', selected_dir) ipt_dir = self.parent().ipt_dir for file_path in file_paths: basename = os.path.basename(file_path) copyfile(file_path, os.path.join(ipt_dir, basename)) except Exception as exc: return {'ret': 2, 'reason': str(exc)} else: return {'ret': 0, 'reason': 'ok'}
def on_addButton_clicked(self): ''' Adds image files to be processed ''' fileNames, __ = QFileDialog.getOpenFileNames(self, self.tr("Select Images"), "", self.tr("Image files (*.tif)")) self.fileListWidget.addItems(fileNames)
def edit(textbox): f = QFileDialog.getOpenFileNames(self, "Select file", "", "*.*") if f: textbox.value = ",".join(f)
def select_files(self): """Optionally select files""" self.selected_files = QFileDialog.getOpenFileNames(self.dlg,"Select one or more files to open",os.environ['HOME'],"Images (*.tif *.vrt)")[0] self.dlg.selectFiles_listWidget.addItems([os.path.basename(i) for i in self.selected_files]) self.selected_urls+=self.selected_files self.selected_urls=list(set(self.selected_urls))
def edit(): f = QFileDialog.getOpenFileNames(parent.treeWidget(), "Select file", "", "*.*") if f: self.lineEdit.setText(",".join(f))
def select_string_file(self): files = QFileDialog.getOpenFileNames(self.dlg, 'Select string file', '', '*.str') self.file_list = files[0] self.dlg.lineEdit.setText(','.join(self.file_list))
def showFileDialog(self, seldir): settings = QgsSettings() text = str(self.text.text()) if os.path.isdir(text): path = text elif not seldir and os.path.isdir(os.path.dirname(text)): path = os.path.dirname(text) elif settings.contains('/Processing/LastInputPath'): path = str(settings.value('/Processing/LastInputPath')) else: path = '' if not seldir: ret, selected_filter = QFileDialog.getOpenFileNames( self, self.tr('Select Files'), path, getFileFilter(self.param)) else: ret = QFileDialog.getExistingDirectory(self, self.tr('Select Directory'), path) if ret: if seldir: settings.setValue('/Processing/LastInputPath', ret) files = [] for pp in Path(ret).rglob("*"): if not pp.is_file(): continue p = pp.as_posix() if ((isinstance(self.param, QgsProcessingParameterRasterLayer) or (isinstance(self.param, QgsProcessingParameterMultipleLayers) and self.param.layerType() == QgsProcessing.TypeRaster)) and not QgsRasterLayer.isValidRasterFileName(p)): continue files.append(p) if not files: return else: files = list(ret) settings.setValue('/Processing/LastInputPath', os.path.dirname(str(files[0]))) for i, filename in enumerate(files): files[i] = dataobjects.getRasterSublayer(filename, self.param) if len(files) == 1: self.text.setText(files[0]) self.textEditingFinished() else: if isinstance(self.param, QgsProcessingParameterMultipleLayers): self.text.setText(';'.join(str(f) for f in files)) else: rowdif = len(files) - (self._table().rowCount() - self.row) for i in range(rowdif): self._panel().addRow() for i, f in enumerate(files): self._table().cellWidget(i + self.row, self.col).setValue(f)