def saveScript(self, saveAs): newPath = None if self.filePath is None or saveAs: scriptDir = ScriptUtils.scriptsFolders()[0] newPath, _ = QFileDialog.getSaveFileName(self, self.tr("Save script"), scriptDir, self.tr("Processing scripts (*.py *.PY)")) if newPath: if not newPath.lower().endswith(".py"): newPath += ".py" self.filePath = newPath if self.filePath: text = self.editor.text() try: with codecs.open(self.filePath, "w", encoding="utf-8") as f: f.write(text) except IOError as e: QMessageBox.warning(self, self.tr("I/O error"), self.tr("Unable to save edits:\n{}").format(str(e)) ) return self.setHasChanged(False) QgsApplication.processingRegistry().providerById("script").refreshAlgorithms()
def new_profile(self): """Create a new profile by name. """ # noinspection PyCallByClass,PyTypeChecker dir = os.path.join(QgsApplication.qgisSettingsDirPath(), 'inasafe', 'minimum_needs') file_name, __ = QFileDialog.getSaveFileName( self, self.tr('Create a minimum needs profile'), expanduser(dir), self.tr('JSON files (*.json *.JSON)'), options=QFileDialog.DontUseNativeDialog) if not file_name: return file_name = basename(file_name) if self.profile_combo.findText(file_name) == -1: minimum_needs = { 'resources': [], 'provenance': '', 'profile': file_name} self.minimum_needs.update_minimum_needs(minimum_needs) self.minimum_needs.save_profile(file_name) self.profile_combo.addItem(file_name) self.clear_resource_list() self.profile_combo.setCurrentIndex( self.profile_combo.findText(file_name)) else: self.profile_combo.setCurrentIndex( self.profile_combo.findText(file_name)) self.select_profile_by_name(file_name)
def exportAsImage(self): self.repaintModel(controls=False) filename, fileFilter = QFileDialog.getSaveFileName(self, self.tr('Save Model As Image'), '', self.tr('PNG files (*.png *.PNG)')) if not filename: return if not filename.lower().endswith('.png'): filename += '.png' totalRect = self.scene.itemsBoundingRect() totalRect.adjust(-10, -10, 10, 10) imgRect = QRectF(0, 0, totalRect.width(), totalRect.height()) img = QImage(totalRect.width(), totalRect.height(), QImage.Format_ARGB32_Premultiplied) img.fill(Qt.white) painter = QPainter() painter.setRenderHint(QPainter.Antialiasing) painter.begin(img) self.scene.render(painter, imgRect, totalRect) painter.end() img.save(filename) self.bar.pushMessage("", "Model was correctly exported as image", level=Qgis.Success, duration=5) self.repaintModel(controls=True)
def saveModel(self, saveAs): if str(self.textGroup.text()).strip() == '' \ or str(self.textName.text()).strip() == '': QMessageBox.warning( self, self.tr('Warning'), self.tr('Please enter group and model names before saving') ) return self.model.setName(str(self.textName.text())) self.model.setGroup(str(self.textGroup.text())) if self.model.sourceFilePath() and not saveAs: filename = self.model.sourceFilePath() else: filename, filter = QFileDialog.getSaveFileName(self, self.tr('Save Model'), ModelerUtils.modelsFolders()[0], self.tr('Processing models (*.model3)')) if filename: if not filename.endswith('.model3'): filename += '.model3' self.model.setSourceFilePath(filename) if filename: if not self.model.toFile(filename): if saveAs: QMessageBox.warning(self, self.tr('I/O error'), self.tr('Unable to save edits. Reason:\n {0}').format(str(sys.exc_info()[1]))) else: QMessageBox.warning(self, self.tr("Can't save model"), QCoreApplication.translate('QgsPluginInstallerInstallingDialog', ( "This model can't be saved in its original location (probably you do not " "have permission to do it). Please, use the 'Save as…' option.")) ) return self.update_model.emit() self.bar.pushMessage("", "Model was correctly saved", level=Qgis.Success, duration=5) self.hasChanged = False
def exportAsPdf(self): self.repaintModel(controls=False) filename, fileFilter = QFileDialog.getSaveFileName(self, self.tr('Save Model As PDF'), '', self.tr('PDF files (*.pdf *.PDF)')) if not filename: return if not filename.lower().endswith('.pdf'): filename += '.pdf' totalRect = self.scene.itemsBoundingRect() totalRect.adjust(-10, -10, 10, 10) printerRect = QRectF(0, 0, totalRect.width(), totalRect.height()) printer = QPrinter() printer.setOutputFormat(QPrinter.PdfFormat) printer.setOutputFileName(filename) printer.setPaperSize(QSizeF(printerRect.width(), printerRect.height()), QPrinter.DevicePixel) printer.setFullPage(True) painter = QPainter(printer) self.scene.render(painter, printerRect, totalRect) painter.end() self.bar.pushMessage("", "Model was correctly exported as PDF", level=Qgis.Success, duration=5) self.repaintModel(controls=True)
def showSelectionDialog(self): if isinstance(self.output, OutputDirectory): self.selectDirectory() return filefilter = self.output.getFileFilter(self.alg) settings = QSettings() if settings.contains('/Processing/LastBatchOutputPath'): path = str(settings.value('/Processing/LastBatchOutputPath')) else: path = '' filename, selectedFileFilter = QFileDialog.getSaveFileName(self, self.tr('Save file'), path, filefilter) if filename: if not filename.lower().endswith( tuple(re.findall("\*(\.[a-z]{1,10})", filefilter))): ext = re.search("\*(\.[a-z]{1,10})", selectedFileFilter) if ext: filename += ext.group(1) settings.setValue('/Processing/LastBatchOutputPath', os.path.dirname(filename)) dlg = AutofillDialog(self.alg) dlg.exec_() if dlg.mode is not None: try: if dlg.mode == AutofillDialog.DO_NOT_AUTOFILL: self.table.cellWidget(self.row, self.col).setValue(filename) elif dlg.mode == AutofillDialog.FILL_WITH_NUMBERS: n = self.table.rowCount() - self.row for i in range(n): name = filename[:filename.rfind('.')] \ + str(i + 1) + filename[filename.rfind('.'):] self.table.cellWidget(i + self.row, self.col).setValue(name) elif dlg.mode == AutofillDialog.FILL_WITH_PARAMETER: n = self.table.rowCount() - self.row for i in range(n): widget = self.table.cellWidget(i + self.row, dlg.param) param = self.alg.parameters[dlg.param] if isinstance(param, (ParameterRaster, ParameterVector, ParameterTable, ParameterMultipleInput)): s = str(widget.getText()) s = os.path.basename(s) s = os.path.splitext(s)[0] elif isinstance(param, ParameterBoolean): s = str(widget.currentIndex() == 0) elif isinstance(param, ParameterSelection): s = str(widget.currentText()) elif isinstance(param, ParameterFixedTable): s = str(widget.table) else: s = str(widget.text()) name = filename[:filename.rfind('.')] + s \ + filename[filename.rfind('.'):] self.table.cellWidget(i + self.row, self.col).setValue(name) except: pass
def saveToGeopackage(self): file_filter = self.tr('GeoPackage files (*.gpkg);;All files (*.*)', 'OutputFile') settings = QgsSettings() if settings.contains('/Processing/LastOutputPath'): path = settings.value('/Processing/LastOutputPath') else: path = ProcessingConfig.getSetting(ProcessingConfig.OUTPUT_FOLDER) filename, filter = QFileDialog.getSaveFileName(self, self.tr("Save to GeoPackage"), path, file_filter, options=QFileDialog.DontConfirmOverwrite) if not filename: return layer_name, ok = QInputDialog.getText(self, self.tr('Save to GeoPackage'), self.tr('Layer name'), text=self.parameter.name().lower()) if ok: self.use_temporary = False if not filename.lower().endswith('.gpkg'): filename += '.gpkg' settings.setValue('/Processing/LastOutputPath', os.path.dirname(filename)) uri = QgsDataSourceUri() uri.setDatabase(filename) uri.setDataSource('', layer_name, 'geom' if isinstance(self.parameter, QgsProcessingParameterFeatureSink) and self.parameter.hasGeometry() else None) self.leText.setText("ogr:" + uri.uri()) self.skipOutputChanged.emit(False) self.destinationChanged.emit()
def select_file(self): """select file ops""" label = self.tr('eXtensible Markup Language (*.xml *.XML)') if self.mode == 0: slabel = self.tr('Save connections') self.filename, filter = QFileDialog.getSaveFileName(self, slabel, '.', label) else: slabel = self.tr('Load connections') self.filename, selected_filter = QFileDialog.getOpenFileName(self, slabel, '.', label) if not self.filename: return # ensure the user never omitted the extension from the file name if not self.filename.lower().endswith('.xml'): self.filename = '%s.xml' % self.filename self.leFileName.setText(self.filename) if self.mode == 1: self.populate() self.buttonBox.button(QDialogButtonBox.Ok).setEnabled(True)
def browse(self): settings = QSettings() key = '/UI/lastShapefileDir' outDir = settings.value(key) home = outDir #outDir = expanduser("~") #filter = (self.DEFAULTPROVIDER + " (*" + # self.DEFAULTEXTENSION + ");;All files (*)") filter = (self.DEFAULTPROVIDER + " (*" + self.DEFAULTEXTENSION + self.EXTRAEXTENSION + ")") #if (self.gdalprovider != self.DEFAULTPROVIDER and # (self.canCreateCopy or # self.canCreate)): # filter = (self.gdalprovider + " (*" + self.gdalext + # ");;" + filter) outFilePath = QFileDialog.getSaveFileName(self, 'Specify file name for skeleton', outDir, filter) outFilePath = unicode(outFilePath) if outFilePath: root, ext = splitext(outFilePath) if ext.lower() != '.tif' and ext.lower() != '.tiff': outFilePath = '%s.tif' % outFilePath outDir = dirname(outFilePath) settings.setValue(key, outDir) # (self.canCreateCopy or self.canCreate): # fileName = splitext(str(fileName))[0]+self.gdalext self.outputRaster.setText(outFilePath)
def exportAsImage(self): self.repaintModel(controls=False) filename, fileFilter = QFileDialog.getSaveFileName(self, self.tr('Save Model As Image'), '', self.tr('PNG files (*.png *.PNG)')) if not filename: return if not filename.lower().endswith('.png'): filename += '.png' totalRect = self.scene.itemsBoundingRect() totalRect.adjust(-10, -10, 10, 10) imgRect = QRectF(0, 0, totalRect.width(), totalRect.height()) img = QImage(totalRect.width(), totalRect.height(), QImage.Format_ARGB32_Premultiplied) img.fill(Qt.white) painter = QPainter() painter.setRenderHint(QPainter.Antialiasing) painter.begin(img) self.scene.render(painter, imgRect, totalRect) painter.end() img.save(filename) self.bar.pushMessage("", self.tr("Successfully exported model as image to <a href=\"{}\">{}</a>").format(QUrl.fromLocalFile(filename).toString(), QDir.toNativeSeparators(filename)), level=Qgis.Success, duration=5) self.repaintModel(controls=True)
def getFileName(self, text, filter, filePath): """filter: [["Shapefile", "shp"], ["Keyhole Markup Language", "kml"]]""" filters = [] for item in filter: filters.append("%s (*.%s)" % (item[0], item[1])) fileDlg = QFileDialog(self.iface.mainWindow()) fileDlg.setNameFilters(filters) fileName, selectedFilter = fileDlg.getSaveFileName(self.iface.mainWindow(), text, filePath, ";;".join(filters) ) QgsMessageLog.logMessage("selectedFilter: {0}".format(selectedFilter), "VoGis", Qgis.Info) #QgsMessageLog.logMessage("{0}".format(fileName), "VoGis", Qgis.Info) if fileName is None or fileName == "": return "", "" QgsMessageLog.logMessage("fileDlg.filters(): {0}".format(fileDlg.nameFilters()), "VoGis", Qgis.Info) selectedFilter = fileDlg.nameFilters().index(selectedFilter) fileExt = filter[selectedFilter][1] QgsMessageLog.logMessage("selectedFilter: {0}".format(selectedFilter), "VoGis", Qgis.Info) QgsMessageLog.logMessage("fileExt: {0}".format(fileExt), "VoGis", Qgis.Info) if fileName.lower().endswith(fileExt) is False: fileName = fileName + "." + fileExt return fileName, fileExt
def exportAsPdf(self): self.repaintModel(controls=False) filename, fileFilter = QFileDialog.getSaveFileName(self, self.tr('Save Model As PDF'), '', self.tr('PDF files (*.pdf *.PDF)')) if not filename: return if not filename.lower().endswith('.pdf'): filename += '.pdf' totalRect = self.scene.itemsBoundingRect() totalRect.adjust(-10, -10, 10, 10) printerRect = QRectF(0, 0, totalRect.width(), totalRect.height()) printer = QPrinter() printer.setOutputFormat(QPrinter.PdfFormat) printer.setOutputFileName(filename) printer.setPaperSize(QSizeF(printerRect.width(), printerRect.height()), QPrinter.DevicePixel) printer.setFullPage(True) painter = QPainter(printer) self.scene.render(painter, printerRect, totalRect) painter.end() self.bar.pushMessage("", self.tr("Successfully exported model as PDF to <a href=\"{}\">{}</a>").format(QUrl.fromLocalFile(filename).toString(), QDir.toNativeSeparators(filename)), level=Qgis.Success, duration=5) self.repaintModel(controls=True)
def _saveToFile( self, sender, startFolder=None ): filter = "OGC GeoPackage (*.gpkg);;ESRI Shape Files (*.shp);;SpatiaLite (*.sqlite);;Geojson File (*.geojson);;GML ( *.gml);;Comma separated value File (excel) (*.csv);;MapInfo TAB (*.TAB);;Any File (*.*)" Fdlg = QFileDialog() Fdlg.setFileMode(QFileDialog.AnyFile) fName, __ = QFileDialog.getSaveFileName(sender, "open file", filter=filter, directory=startFolder) if fName: ext = os.path.splitext( fName )[1] if "GPKG" in ext.upper(): flType = "GPKG" elif "SHP" in ext.upper(): flType = "ESRI Shapefile" elif "SQLITE" in ext.upper(): flType = "SQLite" elif "GEOJSON" in ext.upper(): #no update possible -> hidden flType = "GeoJSON" elif "GML" in ext.upper(): flType = "GML" elif 'TAB' in ext.upper(): flType = 'MapInfo File' elif 'CSV' in ext.upper(): flType = 'CSV' else: fName = fName + ".shp" flType = "ESRI Shapefile" return (fName , flType ) else: return None
def export(self): """ Export the results to a CSV file """ # Remember the last location in which we saved settings = QSettings() lastFolder = str(settings.value("constraintchecker/lastSaveFolder", os.sep)) outFileName, ext_selector = QFileDialog.getSaveFileName(self, 'Save Query Results', lastFolder, 'Comma Separated Variable Files (*.csv)') # Store the path we just looked in head, tail = os.path.split(outFileName) if head != os.sep and head.lower() != 'c:\\' and head != '': settings.setValue("constraintchecker/lastSaveFolder", head) if len(outFileName) == 0: # User hit cancel return # Export the file try: csvfile = open(outFileName+'.csv', 'w') except: msg = 'Failed to open %s for writing - perhaps it is open in another application?' % outFileName QMessageBox.critical(self, 'Failed to Open File', msg) return resWriter = csv.writer(csvfile) resWriter.writerow(self.resultModel.headerNames) for i in range(self.resultModel.rowCount()): resWriter.writerow(self.resultModel.fetchRow(i)) csvfile.close()
def exportAsSvg(self): self.repaintModel(controls=False) filename, fileFilter = QFileDialog.getSaveFileName(self, self.tr('Save Model As SVG'), '', self.tr('SVG files (*.svg *.SVG)')) if not filename: return if not filename.lower().endswith('.svg'): filename += '.svg' totalRect = self.scene.itemsBoundingRect() totalRect.adjust(-10, -10, 10, 10) svgRect = QRectF(0, 0, totalRect.width(), totalRect.height()) svg = QSvgGenerator() svg.setFileName(filename) svg.setSize(QSize(totalRect.width(), totalRect.height())) svg.setViewBox(svgRect) svg.setTitle(self.model.displayName()) painter = QPainter(svg) self.scene.render(painter, svgRect, totalRect) painter.end() self.bar.pushMessage("", self.tr("Successfully exported model as SVG to <a href=\"{}\">{}</a>").format(QUrl.fromLocalFile(filename).toString(), QDir.toNativeSeparators(filename)), level=Qgis.Success, duration=5) self.repaintModel(controls=True)
def saveModel(self, saveAs): if not self.can_save(): return self.model.setName(str(self.textName.text())) self.model.setGroup(str(self.textGroup.text())) if self.model.sourceFilePath() and not saveAs: filename = self.model.sourceFilePath() else: filename, filter = QFileDialog.getSaveFileName(self, self.tr('Save Model'), ModelerUtils.modelsFolders()[0], self.tr('Processing models (*.model3 *.MODEL3)')) if filename: if not filename.endswith('.model3'): filename += '.model3' self.model.setSourceFilePath(filename) if filename: if not self.model.toFile(filename): if saveAs: QMessageBox.warning(self, self.tr('I/O error'), self.tr('Unable to save edits. Reason:\n {0}').format(str(sys.exc_info()[1]))) else: QMessageBox.warning(self, self.tr("Can't save model"), QCoreApplication.translate('QgsPluginInstallerInstallingDialog', ( "This model can't be saved in its original location (probably you do not " "have permission to do it). Please, use the 'Save as…' option.")) ) return self.update_model.emit() if saveAs: self.bar.pushMessage("", self.tr("Model was correctly saved to <a href=\"{}\">{}</a>").format(QUrl.fromLocalFile(filename).toString(), QDir.toNativeSeparators(filename)), level=Qgis.Success, duration=5) else: self.bar.pushMessage("", self.tr("Model was correctly saved"), level=Qgis.Success, duration=5) self.hasChanged = False
def saveAsScriptFile(self, index=None): tabWidget = self.tabEditorWidget.currentWidget() if not index: index = self.tabEditorWidget.currentIndex() if not tabWidget.path: fileName = self.tabEditorWidget.tabText(index) + '.py' folder = self.settings.value("pythonConsole/lastDirPath", QDir.homePath()) pathFileName = os.path.join(folder, fileName) fileNone = True else: pathFileName = tabWidget.path fileNone = False saveAsFileTr = QCoreApplication.translate("PythonConsole", "Save File As") filename, filter = QFileDialog.getSaveFileName(self, saveAsFileTr, pathFileName, "Script file (*.py)") if filename: try: tabWidget.save(filename) except (IOError, OSError) as error: msgText = QCoreApplication.translate('PythonConsole', 'The file <b>{0}</b> could not be saved. Error: {1}').format(tabWidget.path, error.strerror) self.callWidgetMessageBarEditor(msgText, 2, False) if fileNone: tabWidget.path = None else: tabWidget.path = pathFileName return if not fileNone: self.updateTabListScript(pathFileName, action='remove')
def getSaveFileName(self, parent=None, caption='', filter='', selectedFilter=None, useEncoding=False): if useEncoding: return self.getDialog(parent, caption, QFileDialog.AcceptSave, QFileDialog.AnyFile, filter, selectedFilter, useEncoding) res, filter = QFileDialog.getSaveFileName(parent, caption, getLastUsedDir(), filter) if res: setLastUsedDir(res) return res
def select_output_directory(self): """Select output directory""" # Input layer input_layer_path = self.layer.source() input_file_name = os.path.basename(input_layer_path) input_extension = os.path.splitext(input_file_name)[1] # Get current path current_file_path = self.output_path_line_edit.text() if not current_file_path or not os.path.exists(current_file_path): current_file_path = input_layer_path # Filtering based on input layer extension_mapping = { '.shp': tr('Shapefile (*.shp);;'), '.geojson': tr('GeoJSON (*.geojson);;'), '.tif': tr('Raster TIF/TIFF (*.tif, *.tiff);;'), '.tiff': tr('Raster TIF/TIFF (*.tiff, *.tiff);;'), '.asc': tr('Raster ASCII File (*.asc);;'), } # Open File Dialog file_path, __ = QFileDialog.getSaveFileName( self, tr('Output File'), current_file_path, extension_mapping[input_extension] ) if file_path: self.output_path_line_edit.setText(file_path)
def on_btnSave_clicked(self): fileName, _ = QFileDialog.getSaveFileName( None, self.tr("Export Colors and elevations as XML"), QDir.homePath(), self.tr("XML files (*.xml *.XML)") ) if fileName == "": return if not fileName.lower().endswith(".xml"): fileName += ".xml" doc = QDomDocument() colorsElem = doc.createElement("ReliefColors") doc.appendChild(colorsElem) colors = self.reliefColors() for c in colors: elem = doc.createElement("ReliefColor") elem.setAttribute("MinElevation", str(c.minElevation)) elem.setAttribute("MaxElevation", str(c.maxElevation)) elem.setAttribute("red", str(c.color.red())) elem.setAttribute("green", str(c.color.green())) elem.setAttribute("blue", str(c.color.blue())) colorsElem.appendChild(elem) with codecs.open(fileName, "w", encoding="utf-8") as f: f.write(doc.toString(2))
def chooseOutputFile(self): # get last used dir settings = QSettings() lastUsedDir = settings.value(self.lastUsedVectorDirSettingsKey, ".") # get selected filter selectedFilter = self.cboFileFormat.itemData(self.cboFileFormat.currentIndex()) # ask for a filename filename, filter = QFileDialog.getSaveFileName(self, self.tr("Choose where to save the file"), lastUsedDir, selectedFilter) if filename == "": return filterString = QgsVectorFileWriter.filterForDriver(selectedFilter) ext = filterString[filterString.find('.'):] ext = ext[:ext.find(' ')] if not filename.lower().endswith(ext): filename += ext # store the last used dir settings.setValue(self.lastUsedVectorDirSettingsKey, QFileInfo(filename).filePath()) self.editOutputFile.setText(filename)
def exportAsSvg(self): self.repaintModel(controls=False) filename, fileFilter = QFileDialog.getSaveFileName(self, self.tr('Save Model As SVG'), '', self.tr('SVG files (*.svg *.SVG)')) if not filename: return if not filename.lower().endswith('.svg'): filename += '.svg' totalRect = self.scene.itemsBoundingRect() totalRect.adjust(-10, -10, 10, 10) svgRect = QRectF(0, 0, totalRect.width(), totalRect.height()) svg = QSvgGenerator() svg.setFileName(filename) svg.setSize(QSize(totalRect.width(), totalRect.height())) svg.setViewBox(svgRect) svg.setTitle(self.model.displayName()) painter = QPainter(svg) self.scene.render(painter, svgRect, totalRect) painter.end() self.bar.pushMessage("", self.tr("Model was correctly exported as SVG"), level=Qgis.Success, duration=5) self.repaintModel(controls=True)
def on_btnSave_clicked(self): fileName, _ = QFileDialog.getSaveFileName(None, self.tr('Export Colors and elevations as XML'), QDir.homePath(), self.tr('XML files (*.xml *.XML)')) if fileName == '': return if not fileName.lower().endswith('.xml'): fileName += '.xml' doc = QDomDocument() colorsElem = doc.createElement('ReliefColors') doc.appendChild(colorsElem) colors = self.reliefColors() for c in colors: elem = doc.createElement('ReliefColor') elem.setAttribute('MinElevation', str(c.minElevation)) elem.setAttribute('MaxElevation', str(c.maxElevation)) elem.setAttribute('red', str(c.color.red())) elem.setAttribute('green', str(c.color.green())) elem.setAttribute('blue', str(c.color.blue())) colorsElem.appendChild(elem) with codecs.open(fileName, 'w', encoding='utf-8') as f: f.write(doc.toString(2))
def exportAsImage(self): filename = unicode(QFileDialog.getSaveFileName(self, self.tr('Save Model As Image'), '', self.tr('PNG files (*.png *.PNG)'))) if not filename: return if not filename.lower().endswith('.png'): filename += '.png' totalRect = QRectF(0, 0, 1, 1) for item in self.scene.items(): totalRect = totalRect.united(item.sceneBoundingRect()) totalRect.adjust(-10, -10, 10, 10) img = QImage(totalRect.width(), totalRect.height(), QImage.Format_ARGB32_Premultiplied) img.fill(Qt.white) painter = QPainter() painter.setRenderHint(QPainter.Antialiasing) painter.begin(img) self.scene.render(painter, totalRect, totalRect) painter.end() img.save(filename)
def save(self): toSave = [] for row in range(self.tblParameters.rowCount()): algParams = {} algOutputs = {} col = 0 alg = self.alg.getCopy() for param in alg.parameters: if param.hidden: continue if isinstance(param, ParameterExtent): col += 1 continue widget = self.tblParameters.cellWidget(row, col) if not self.setParamValue(param, widget, alg): self.parent.lblProgress.setText( self.tr('<b>Missing parameter value: %s (row %d)</b>') % (param.description, row + 1)) return algParams[param.name] = param.getValueAsCommandLineParameter() col += 1 col = 0 for param in alg.parameters: if param.hidden: continue if isinstance(param, ParameterExtent): widget = self.tblParameters.cellWidget(row, col) if not self.setParamValue(param, widget, alg): self.parent.lblProgress.setText( self.tr('<b>Missing parameter value: %s (row %d)</b>') % (param.description, row + 1)) return algParams[param.name] = unicode(param.value) col += 1 for out in alg.outputs: if out.hidden: continue widget = self.tblParameters.cellWidget(row, col) text = widget.getValue() if text.strip() != '': algOutputs[out.name] = text.strip() col += 1 else: self.parent.lblProgress.setText( self.tr('<b>Wrong or missing parameter value: %s (row %d)</b>') % (out.description, row + 1)) return toSave.append({self.PARAMETERS: algParams, self.OUTPUTS: algOutputs}) filename = unicode(QFileDialog.getSaveFileName(self, self.tr('Save batch'), None, self.tr('JSON files (*.json)'))) if filename: if not filename.endswith('.json'): filename += '.json' with open(filename, 'w') as f: json.dump(toSave, f)
def openOutput(sender=None, startFolder=None): fd = QFileDialog() filter = "OGC GeoPackage (*.gpkg);;ESRI Shape File (*.shp);;Comma separated value File (excel) (*.csv);;geojson (*.geojson);;GML File (*.gml);;MapInfo TAB (*.tab);;SpatiaLite (*.sqlite);;KML (google earth) (*.kml);;Any File (*.*)" fName = fd.getSaveFileName( sender, "open file", filter=filter, directory=startFolder) if fName: return fName[0] else: return None
def open_keyword_cache_path(self): """Open File dialog to choose the keyword cache path.""" # noinspection PyCallByClass,PyTypeChecker file_name, __ = QFileDialog.getSaveFileName( self, self.tr('Set keyword cache file'), self.leKeywordCachePath.text(), self.tr('Sqlite DB File (*.db)')) if file_name: self.leKeywordCachePath.setText(file_name)
def saveLog(self): fileName, filter = QFileDialog.getSaveFileName(self, self.tr('Save file'), '.', self.tr('Log files (*.log *.LOG)')) if fileName == '': return if not fileName.lower().endswith('.log'): fileName += '.log' ProcessingLog.saveLog(fileName)
def saveResults(self, saveAll=False): currentItem = self.resultsTree.currentItem() if not saveAll and not hasattr(currentItem, "result"): QMessageBox.warning(self, "Save results", "No test item selected") return settings = QSettings('Boundless', 'qgistester') lastDirectory = settings.value('lastDirectory', '.') fileName, __ = QFileDialog.getSaveFileName(self, self.tr('Save file'), lastDirectory, self.tr('HTML files (*.html)')) # Needed to handle different return values in Qt4 and Qt5 if isinstance(fileName, tuple): fileName = fileName[0] if fileName == '': return if not fileName.lower().endswith('.html'): fileName += '.html' settings.setValue('lastDirectory', QFileInfo(fileName).absoluteDir().absolutePath()) out = '<html><head>' out += '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head><body>' if saveAll: for i in range(self.resultsTree.topLevelItemCount()): groupItem = self.resultsTree.topLevelItem(i) out += '<h3>{}</h3>'.format(groupItem.text(0)) out += '<ul>' for j in range(groupItem.childCount()): results = groupItem.child(j).result out += '<li>[{}] {}'.format(self.resultTag[results.status], results.test.name) if results.status not in [results.SKIPPED, results.PASSED]: out += '<p>Failed at step {} with message</p>'.format(results.errorStep) out += '<code>{}</code>'.format(results.errorMessage) out += '</li>' out += '</ul>' else: results = self.resultsTree.currentItem().result out += '<h3>{}</h3>'.format(results.test.group) out += '<ul>' out += '<li>[{}] {}'.format(self.resultTag[results.status], results.test.name) if results.status not in [results.SKIPPED, results.PASSED]: out += '<p>Failed at step {} with message</p>'.format(results.errorStep) out += '<code>{}</code>'.format(results.errorMessage) out += '</li></ul>' out += '</body></html>' with codecs.open(fileName, 'w', encoding='utf-8') as f: f.write(out)
def save_fig(self): formats = ( "Joint Photographic Experts Group (*.jpg) (*.jpg);;Scalable Vector Grapics (*.svg) (*.svg);;"+ "Portable Document Format (*.pdf) (*.pdf);;Tagged Image File Format (*.tif) (*.tif)"+ ";;Encapsulated Postscript (*.eps) (*.eps)") if not(sys.platform == 'win32'): formats += ";;Portable Network Graphics (*.png) (*.png)" fileName, __ = QFileDialog.getSaveFileName( self , "Save File", self.startDir, formats); self.figure.savefig(fileName)
def saveModel(self, saveAs) -> bool: if not self.validateSave(QgsModelDesignerDialog.SaveAction.SaveAsFile): return False model_name_matched_file_name = self.model().modelNameMatchesFilePath() if self.model().sourceFilePath() and not saveAs: filename = self.model().sourceFilePath() else: if self.model().sourceFilePath(): initial_path = Path(self.model().sourceFilePath()) elif self.model().name(): initial_path = Path(ModelerUtils.modelsFolders()[0]) / ( self.model().name() + '.model3') else: initial_path = Path(ModelerUtils.modelsFolders()[0]) filename, _ = QFileDialog.getSaveFileName( self, self.tr('Save Model'), initial_path.as_posix(), self.tr('Processing models (*.model3 *.MODEL3)')) if not filename: return False filename = QgsFileUtils.ensureFileNameHasExtension( filename, ['model3']) self.model().setSourceFilePath(filename) if not self.model().name() or self.model().name() == self.tr( 'model'): self.setModelName(Path(filename).stem) elif saveAs and model_name_matched_file_name: # if saving as, and the model name used to match the filename, then automatically update the # model name to match the new file name self.setModelName(Path(filename).stem) if not self.model().toFile(filename): if saveAs: QMessageBox.warning( self, self.tr('I/O error'), self.tr('Unable to save edits. Reason:\n {0}').format( str(sys.exc_info()[1]))) else: QMessageBox.warning( self, self.tr("Can't save model"), self. tr("This model can't be saved in its original location (probably you do not " "have permission to do it). Please, use the 'Save as…' option." )) return False self.update_model.emit() if saveAs: self.messageBar().pushMessage( "", self.tr("Model was saved to <a href=\"{}\">{}</a>").format( QUrl.fromLocalFile(filename).toString(), QDir.toNativeSeparators(filename)), level=Qgis.Success, duration=5) self.setDirty(False) return True
def on_btnSave_clicked(self): f, __ = QFileDialog.getSaveFileName(self, 'Save Optimization File:', os.getcwd(), '*.gso') if f == '': return os.chdir(os.path.dirname(str(f))) ofile = OptimizationFile.OptimizationFile() ofile.ControlFile = self.ui.tbxControlFile.text() ofile.BaseLayer = self.ui.cmbBaseLayer.currentText() for i in range(self.ui.tblOptAttributes.rowCount()): col1 = self.ui.tblOptAttributes.item( i, 0) or self.ui.tblOptAttributes.cellWidget(i, 0) col2 = self.ui.tblOptAttributes.item(i, 1) col3 = self.ui.tblOptAttributes.item(i, 2) col4 = self.ui.tblOptAttributes.item(i, 3) col5 = self.ui.tblOptAttributes.item(i, 4) if col1 and col2 and col3 and col4 and col5: try: col1 = str( self.ui.tblOptAttributes.cellWidget(i, 0).currentText()) except: col1 = str(self.ui.tblOptAttributes.item(i, 0).text()) col2 = str(self.ui.tblOptAttributes.item(i, 1).text()) col3 = str(self.ui.tblOptAttributes.item(i, 2).text()) col4 = str(self.ui.tblOptAttributes.item(i, 3).text()) col5 = str(self.ui.tblOptAttributes.item(i, 4).text()) ofile.OptAttributes.update({i: [col1, col2, col3, col4, col5]}) for i in range(self.ui.tblObjAttributes.rowCount()): col1 = self.ui.tblObjAttributes.item( i, 0) or self.ui.tblObjAttributes.cellWidget(i, 0) col2 = self.ui.tblObjAttributes.item( i, 1) or self.ui.tblObjAttributes.cellWidget(i, 1) if col1 and col2: try: col1 = str( self.ui.tblObjAttributes.cellWidget(i, 0).currentText()) except: col1 = str(self.ui.tblObjAttributes.item(i, 0).text()) try: col2 = str( self.ui.tblObjAttributes.cellWidget(i, 1).currentText()) except: col2 = str(self.ui.tblObjAttributes.item(i, 1).text()) col3 = str(self.ui.tblObjAttributes.item(i, 2).text()) ofile.ObjAttributes.update({i: [col1, col2, col3]}) ofile.T0 = self.ui.tbxT0.text() ofile.Tf = self.ui.tbxTf.text() ofile.dwell = self.ui.tbxDwell.text() ofile.feps = self.ui.tbxTolerance.text() ofile.maxeval = self.ui.tbxMaxEval.text() ofile.maxiter = self.ui.tbxMaxIter.text() ofile.maxaccept = self.ui.tbxMaxAccept.text() ofile.m = self.ui.tbxm.text() ofile.n = self.ui.tbxn.text() ofile.quench = self.ui.tbxQuench.text() ofile.boltzmann = self.ui.tbxBoltzmann.text() ofile.WriteFile(f)
def save(self): toSave = [] for row in range(self.tblParameters.rowCount()): algParams = {} algOutputs = {} col = 0 alg = self.alg.getCopy() for param in alg.parameters: if param.hidden: continue if isinstance(param, ParameterExtent): col += 1 continue widget = self.tblParameters.cellWidget(row, col) if not self.setParamValue(param, widget, alg): self.parent.lblProgress.setText( self.tr('<b>Missing parameter value: %s (row %d)</b>') % (param.description, row + 1)) return algParams[param.name] = param.getValueAsCommandLineParameter() col += 1 col = 0 for param in alg.parameters: if param.hidden: continue if isinstance(param, ParameterExtent): widget = self.tblParameters.cellWidget(row, col) if not self.setParamValue(param, widget, alg): self.parent.lblProgress.setText( self. tr('<b>Missing parameter value: %s (row %d)</b>') % (param.description, row + 1)) return algParams[param.name] = unicode(param.value()) col += 1 for out in alg.outputs: if out.hidden: continue widget = self.tblParameters.cellWidget(row, col) text = widget.getValue() if text.strip() != '': algOutputs[out.name] = text.strip() col += 1 else: self.parent.lblProgress.setText( self. tr('<b>Wrong or missing parameter value: %s (row %d)</b>' ) % (out.description, row + 1)) return toSave.append({ self.PARAMETERS: algParams, self.OUTPUTS: algOutputs }) filename = unicode( QFileDialog.getSaveFileName(self, self.tr('Save batch'), None, self.tr('JSON files (*.json)'))) if filename: if not filename.endswith('.json'): filename += '.json' with open(filename, 'w') as f: json.dump(toSave, f)
def save(self): toSave = [] context = dataobjects.createContext() for row in range(self.batchRowCount()): algParams = {} algOutputs = {} col = 0 alg = self.alg for param in alg.parameterDefinitions(): if param.flags() & QgsProcessingParameterDefinition.FlagHidden: continue if param.isDestination(): continue wrapper = self.wrappers[row][col] # For compatibility with 3.x API, we need to check whether the wrapper is # the deprecated WidgetWrapper class. If not, it's the newer # QgsAbstractProcessingParameterWidgetWrapper class # TODO QGIS 4.0 - remove if issubclass(wrapper.__class__, WidgetWrapper): widget = wrapper.widget else: widget = wrapper.wrappedWidget() value = wrapper.parameterValue() if not param.checkValueIsAcceptable(value, context): self.parent.messageBar().pushMessage( "", self.tr( 'Wrong or missing parameter value: {0} (row {1})'). format(param.description(), row + 1), level=Qgis.Warning, duration=5) return algParams[param.name()] = param.valueAsPythonString( value, context) col += 1 for out in alg.destinationParameterDefinitions(): if out.flags() & QgsProcessingParameterDefinition.FlagHidden: continue widget = self.tblParameters.cellWidget(row + 1, col) text = widget.getValue() if text.strip() != '': algOutputs[out.name()] = text.strip() col += 1 else: self.parent.messageBar().pushMessage( "", self.tr('Wrong or missing output value: {0} (row {1})' ).format(out.description(), row + 1), level=Qgis.Warning, duration=5) return toSave.append({ self.PARAMETERS: algParams, self.OUTPUTS: algOutputs }) settings = QgsSettings() last_path = settings.value("/Processing/LastBatchPath", QDir.homePath()) filename, __ = QFileDialog.getSaveFileName( self, self.tr('Save Batch'), last_path, self.tr('JSON files (*.json)')) if filename: if not filename.endswith('.json'): filename += '.json' last_path = QFileInfo(filename).path() settings.setValue('/Processing/LastBatchPath', last_path) with open(filename, 'w') as f: json.dump(toSave, f)
def select_output_file(self): filename = QFileDialog.getSaveFileName( self.dlg, "Select output file ", "", '*.tif' ) self.dlg.lineEdit.setText(filename[0])
def select_output_vector(self): filename, _filter = QFileDialog.getSaveFileName( self.dlg, "Select output vector ", "", '*.shp') self.dlg.lineEdit.setText(filename)
def browse(self): filename, _ = QFileDialog.getSaveFileName(self, "Footprints filename", "", "GPKG Files (*.gpkg)") if filename: self.txtFilename.setText(filename)
def run(self): """Run method that performs all the real work""" # project folder qgz_path = QgsProject.instance().fileName() filename = QFileDialog.getSaveFileName(QFileDialog(), "Save Folder", qgz_path, 'QGZ files (*.qgz)') # temporary folder temp_path = tempfile.gettempdir() QgsMessageLog.logMessage("Start", 'embedded SVG', 0) try: # extraction of qgs file with ZipFile(qgz_path, "r") as in_qgz: for f in in_qgz.infolist(): if f.filename.endswith('.qgs'): in_qgz.extract(f.filename, temp_path) datafile = temp_path + "\\" + f.filename with open(datafile, 'r') as f: tree = ET.parse(datafile) root = tree.getroot() # search for layers for symbol in root.iter("layer-tree-layer"): sym_att = symbol.attrib text = json.dumps(str(sym_att), ensure_ascii=False).encode('utf-8') try: if b".shp" not in text: continue else: test = text.decode().split("'") matching = [s for s in test if ".shp" in s] layer_paths = [ layer.source() for layer in QgsProject.instance().mapLayers().values() ] for layer in layer_paths: test = matching[0].split("/") if test[-1] in layer: symbol.set("source", layer) for symbol2 in root.iter("datasource"): if test[-1] in symbol2.text and test[ -1] in layer: symbol2.text = layer except Exception as e: QgsMessageLog.logMessage(" search fail: " + str(e), 'embedded SVG', 0) # search for svg filenames for symbol in root.iter("prop"): sym_att = symbol.attrib text = json.dumps(str(sym_att), ensure_ascii=False).encode('utf-8') try: if b".svg" not in text: continue else: test = text.decode().split("'") matching = [s for s in test if ".svg" in s] # SVG Ordner des Alkis Plugins svg_folder = QgsSymbolLayerUtils.listSvgFiles() # search for svg name in svg folder for svg_pic in svg_folder: if matching[0] in svg_pic: image = open(svg_pic, 'r') # encode svg file to base64 and write into qgs image_read = str(image.read()) image_64_encode = base64.b64encode( image_read.encode("utf-8")) image_64_encode_str = str(image_64_encode, "utf-8") encoded_svg = "base64:" + image_64_encode_str symbol.set("v", encoded_svg) except Exception as e: QgsMessageLog.logMessage(" search fail: " + str(e), 'embedded SVG', 0) tree.write(datafile) file_paths = [] # new zipfile for new qgs file with ZipFile(filename[0][:-4] + ".qgz", 'w') as zip: # with ZipFile(qgz_path[:-4] + "_svg_embedded.qgz", 'w') as zip: zip.write(datafile, basename(datafile)) os.remove(datafile) QgsMessageLog.logMessage("Finish", 'embedded SVG', 0) except Exception as e: QgsMessageLog.logMessage(" search fail: " + str(e), 'embedded SVG', 0)
def load_fieldbook(self): """ Import an electric fieldbook from file (GSI, JOB/ARE, ...) """ if get_coordlist() is None: QMessageBox.warning( self.iface.mainWindow(), tr("Warning"), tr("No coordinate list is opened, coordinates will be lost from the fieldbook" )) fname, __ = QFileDialog.getOpenFileName( self.iface.mainWindow(), tr('Electric fieldbook'), config.homedir, filter=tr('Nikon RAW (*.raw);;' 'Leica GSI (*.gsi);;' 'Leica IDX (*.idx);;' 'Geodimeter JOB/ARE (*.job *.are);;' 'Sokkia CRD (*.crd);;' 'SurvCE RW5 (*.rw5);;' 'STONEX DAT (*.dat);;' 'Text dump (*.dmp)')) if not fname: return fb_dbf = None ofname = None # file selected # make a copy of dbf template if not are is loaded if QRegExp(r'\.are$', Qt.CaseInsensitive).indexIn(fname) == -1: # ask for table name ofname, __ = QFileDialog.getSaveFileName( self.iface.mainWindow(), tr('QGIS fieldbook'), QFileInfo(fname).absolutePath(), filter=tr('Sqlite file (*.sqlite)')) if not ofname: return # remember last input dir config.homedir = QFileInfo(fname).absolutePath() config.store_config() # start with 'fb_'? if QRegExp('fb_').indexIn(QFileInfo(ofname).baseName()): ofname = QDir.cleanPath( QFileInfo(ofname).absolutePath() + QDir().separator() + 'fb_' + QFileInfo(ofname).fileName()) if QRegExp(r'\.sqlite', Qt.CaseInsensitive).indexIn(ofname) == -1: ofname += '.sqlite' tempname = QDir.cleanPath(self.plugin_dir + QDir().separator() + 'template' + QDir().separator() + 'fb_template.sqlite') if not QFile(tempname).copy(ofname): res = QMessageBox.warning( self.iface.mainWindow(), tr('File warning'), tr('Fieldbook file exists. Replace it?'), QMessageBox.Yes | QMessageBox.No, QMessageBox.No) if res == QMessageBox.No: return fb_dbf = QgsVectorLayer(ofname, QFileInfo(ofname).baseName(), 'ogr') if not fb_dbf or not fb_dbf.isValid(): QMessageBox.warning(self.iface.mainWindow(), tr('File warning'), tr('Fieldbook loading error'), QMessageBox.Ok) return QgsProject.instance().addMapLayer(fb_dbf) if QRegExp(r'\.gsi$', Qt.CaseInsensitive).indexIn(fname) > -1: fb = LeicaGsi(fname) elif QRegExp(r'\.job$', Qt.CaseInsensitive).indexIn(fname) > -1 or \ QRegExp(r'\.are$', Qt.CaseInsensitive).indexIn(fname) > -1: fb = JobAre(fname) elif QRegExp(r'\.crd$', Qt.CaseInsensitive).indexIn(fname) > -1: fb = Sdr(fname) elif QRegExp(r'\.rw5$', Qt.CaseInsensitive).indexIn(fname) > -1: fb = SurvCE(fname) elif QRegExp(r'\.dat$', Qt.CaseInsensitive).indexIn(fname) > -1: fb = Stonex(fname) elif QRegExp(r'\.dmp$', Qt.CaseInsensitive).indexIn(fname) > -1: fb = Dump(fname) elif QRegExp(r'\.idx$', Qt.CaseInsensitive).indexIn(fname) > -1: fb = Idex(fname) elif QRegExp(r'\.raw$', Qt.CaseInsensitive).indexIn(fname) > -1: fb = NikonRaw(fname) else: QMessageBox.warning(self.iface.mainWindow(), tr('File warning'), tr('Unknown fieldbook type'), QMessageBox.Ok) return i = 10 # ordinal number for fieldbook records # fb_dbf.startEditing() fb.open() n_fb = 0 # fieldbook records stored n_co = 0 # points stored in coordinate list while True: # get next observation/station data from fieldbook r = fb.parse_next() if r is None: break # end of file if 'station' in r: # add row to fieldbook table record = QgsFeature() # add & initialize attributes record.setFields(fb_dbf.fields(), True) j = fb_dbf.dataProvider().fieldNameIndex('id') if j != -1: record.setAttribute(j, i) for key in r: j = fb_dbf.dataProvider().fieldNameIndex(key) if j != -1: record.setAttribute(j, r[key]) (xxx, yyy) = fb_dbf.dataProvider().addFeatures([record]) if not xxx: QMessageBox.warning(self.iface.mainWindow(), tr('File warning'), tr('Fieldbook record creation error'), tr('OK')) return n_fb += 1 if 'station_e' in r or 'station_z' in r: # store station coordinates too dimension = 0 if 'station_z' in r: dimension += 1 else: r['station_z'] = None if 'station_e' in r and 'station_n' in r: dimension += 2 else: r['station_e'] = None r['station_n'] = None if 'pc' not in r: r['pc'] = None if 'pt' not in r: r['pt'] = None p = Point(r['point_id'], r['station_e'], r['station_n'], r['station_z'], r['pc'], r['pt']) qp = ScPoint(p) qp.store_coord(dimension) n_co += 1 if 'e' in r or 'z' in r: # store coordinates too dimension = 0 if 'z' in r: dimension += 1 else: r['z'] = None if 'e' in r and 'n' in r: dimension += 2 else: r['e'] = None r['n'] = None if 'pc' not in r: r['pc'] = None if 'pt' not in r: r['pt'] = None p = Point(r['point_id'], r['e'], r['n'], r['z'], r['pc'], r['pt']) qp = ScPoint(p) qp.store_coord(dimension) n_co += 1 i += 10 # fb_dbf.commitChanges() if QRegExp(r'\.are$', Qt.CaseInsensitive).indexIn(fname) == -1: if n_fb == 0: # no observations QgsProject.instance().removeMapLayer(fb_dbf.id()) # remove empty file QFile(ofname).remove() if n_co == 0: # no coordinates QMessageBox.warning( self.iface.mainWindow(), tr("Warning"), tr("Neither coordinates nor observations found")) else: QMessageBox.warning(self.iface.mainWindow(), tr("Warning"), tr("No observations found")) self.log.write() self.log.write_log(tr("Fieldbook loaded: ") + fname) self.log.write(" %d observations, %d coordinates" % (n_fb, n_co)) fb.close()
def select_output_gaps(self): filename, _filter = QFileDialog.getSaveFileName( self.dlg, "Select output gaps ", "", '*.shp') self.dlg.lineEdit_2.setText(filename)
def open_file_browser(self): output_file, __ = QFileDialog.getSaveFileName(self.parent, tr('Save shapefile'), filter='SHP (*.shp)') #Fix the filename bug self.le_output_filepath.setText(output_file)
def select_output_file(self): filename, _filter = QFileDialog.getSaveFileName( self.dlg, "Sélectionner le fichier de sortie", "", '*.pdf') self.dlg.lineEdit.setText(filename)
def select_output_file(self): filename, _filter = QFileDialog.getSaveFileName( self.dlg, "Select output file ", "", '*.csv') self.dlg.lineEdit.setText(filename)
def selectFileNameToSave(line_edit_widget, title, file_filter, parent, extension): filename, matched_filter = QFileDialog.getSaveFileName( parent, title, line_edit_widget.text(), file_filter) line_edit_widget.setText(filename if filename.endswith(extension) else ( filename + extension if filename else ''))
def browseOutputFile(self): filename = QFileDialog.getSaveFileName(self, "Select output file ", "", '*.tif') self.outputPlace.setText(filename[0])
def export_dock_content(self, output_format: OutputFormats): """ Export the current displayed metadata sheet to the given format. """ layer_name = iface.activeLayer().name() file_path = os.path.join( self.settings.value("UI/lastFileNameWidgetDir"), '{name}.{ext}'.format(name=layer_name, ext=output_format.ext) ) output_file = QFileDialog.getSaveFileName( self, tr("Save File as {format}").format(format=output_format.label), file_path, "{label} (*.{ext})".format( label=output_format.label, ext=output_format.ext, ) ) if output_file[0] == '': return self.settings.setValue("UI/lastFileNameWidgetDir", os.path.dirname(output_file[0])) output_file_path = output_file[0] parent_folder = str(Path(output_file_path).parent) if output_format == OutputFormats.PDF: printer = QPrinter() printer.setOutputFormat(QPrinter.PdfFormat) printer.setPageMargins(20, 20, 20, 20, QPrinter.Millimeter) printer.setOutputFileName(output_file_path) self.viewer.print(printer) iface.messageBar().pushSuccess( tr("Export PDF"), tr( "The metadata has been exported as PDF successfully in " "<a href=\"{}\">{}</a>").format(parent_folder, output_file_path) ) elif output_format in [OutputFormats.HTML, OutputFormats.DCAT]: if output_format == OutputFormats.HTML: data_str = self.viewer.page().currentFrame().toHtml() else: sql = self.sql_for_layer( self.current_datasource_uri, output_format=OutputFormats.DCAT) data = self.current_connection.executeSql(sql) with open(resources_path('xml', 'dcat.xml')) as xml_file: xml_template = xml_file.read() locale = QgsSettings().value("locale/userLocale", QLocale().name()) locale = locale.split('_')[0].lower() xml = parseString(xml_template.format(locale=locale, content=data[0][0])) data_str = xml.toprettyxml() with open(output_file[0], "w") as file_writer: file_writer.write(data_str) iface.messageBar().pushSuccess( tr("Export") + ' ' + output_format.label, tr( "The metadata has been exported as {format} successfully in " "<a href=\"{folder}\">{path}</a>").format( format=output_format.label, folder=parent_folder, path=output_file_path) )
def showSelectionDialog(self): if isinstance(self.output, QgsProcessingParameterFolderDestination): self.selectDirectory() return filefilter = getFileFilter(self.output) settings = QgsSettings() if settings.contains('/Processing/LastBatchOutputPath'): path = str(settings.value('/Processing/LastBatchOutputPath')) else: path = '' filename, selectedFileFilter = QFileDialog.getSaveFileName( self, self.tr('Save File'), path, filefilter) if filename: if not filename.lower().endswith( tuple(re.findall("\\*(\\.[a-z]{1,10})", filefilter))): ext = re.search("\\*(\\.[a-z]{1,10})", selectedFileFilter) if ext: filename += ext.group(1) settings.setValue('/Processing/LastBatchOutputPath', os.path.dirname(filename)) dlg = AutofillDialog(self.alg) dlg.exec_() if dlg.mode is not None: try: if dlg.mode == AutofillDialog.DO_NOT_AUTOFILL: self.table.cellWidget(self.row, self.col).setValue(filename) elif dlg.mode == AutofillDialog.FILL_WITH_NUMBERS: n = self.table.rowCount() - self.row for i in range(n): name = filename[:filename.rfind('.')] \ + str(i + 1) + filename[filename.rfind('.'):] self.table.cellWidget(i + self.row, self.col).setValue(name) elif dlg.mode == AutofillDialog.FILL_WITH_PARAMETER: n = self.table.rowCount() - self.row for i in range(n): widget = self.table.cellWidget( i + self.row, dlg.param_index) param = self.alg.parameterDefinitions()[ dlg.param_index] if isinstance( param, (QgsProcessingParameterRasterLayer, QgsProcessingParameterFeatureSource, QgsProcessingParameterVectorLayer, QgsProcessingParameterMultipleLayers)): v = widget.value() if isinstance(v, QgsMapLayer): s = v.name() else: s = os.path.basename(v) s = os.path.splitext(s)[0] elif isinstance(param, QgsProcessingParameterBoolean): s = str(widget.currentIndex() == 0) elif isinstance(param, QgsProcessingParameterEnum): s = str(widget.currentText()) elif isinstance(param, QgsProcessingParameterMatrix): s = str(widget.table) else: s = str(widget.text()) name = filename[:filename.rfind('.')] + s \ + filename[filename.rfind('.'):] self.table.cellWidget(i + self.row, self.col).setValue(name) except: pass
def setNetworkOutput(self): file_name, _ = QFileDialog.getSaveFileName(self, "Save output file ", "catchment_network", '*.shp') if file_name: self.networkText.setText(file_name)
def select_m3_shp_output(self): self.dlg.m3_lineEdit_output.setText("") self.shpPath, self._filter = QFileDialog.getSaveFileName( self.dlg, "Select input shp file", "", '*.shp') self.dlg.m3_lineEdit_output.setText(self.shpPath)
def select_output_file(self): filename, _filter = QFileDialog.getSaveFileName( self.dlg, "Select output file ", "", "*.tif") self.dlg.OutputFile.setText(filename)
def setIrrepOutputFilePath(self): (irrepOutputFilePathNameText, fileTypeDetailsText) = QFileDialog.getSaveFileName( self, 'Save irreplaceability output file', '*.csv') self.outputLineEdit.setText(irrepOutputFilePathNameText)
def saveDialog(self): filename = QFileDialog.getSaveFileName(None, "Save File", self.dirname, "Text CSV (*.csv)")[0] if filename: self.dirname = os.path.dirname(filename) self.saveFile(filename)
def showSelectionDialog(self): if isinstance(self.output, OutputDirectory): self.selectDirectory() return filefilter = self.output.getFileFilter(self.alg) settings = QSettings() if settings.contains('/Processing/LastBatchOutputPath'): path = unicode(settings.value('/Processing/LastBatchOutputPath')) else: path = '' filename, selectedFileFilter = QFileDialog.getSaveFileName( self, self.tr('Save file'), path, filefilter) # fix_print_with_import print(filename, selectedFileFilter) if filename: if not filename.lower().endswith( tuple(re.findall("\*(\.[a-z]{1,10})", filefilter))): ext = re.search("\*(\.[a-z]{1,10})", selectedFileFilter) if ext: filename += ext.group(1) settings.setValue('/Processing/LastBatchOutputPath', os.path.dirname(filename)) dlg = AutofillDialog(self.alg) dlg.exec_() if dlg.mode is not None: try: if dlg.mode == AutofillDialog.DO_NOT_AUTOFILL: self.table.cellWidget(self.row, self.col).setValue(filename) elif dlg.mode == AutofillDialog.FILL_WITH_NUMBERS: n = self.table.rowCount() - self.row for i in range(n): name = filename[:filename.rfind('.')] \ + unicode(i + 1) + filename[filename.rfind('.'):] self.table.cellWidget(i + self.row, self.col).setValue(name) elif dlg.mode == AutofillDialog.FILL_WITH_PARAMETER: n = self.table.rowCount() - self.row for i in range(n): widget = self.table.cellWidget( i + self.row, dlg.param) param = self.alg.parameters[dlg.param] if isinstance( param, (ParameterRaster, ParameterVector, ParameterTable, ParameterMultipleInput)): s = unicode(widget.getText()) s = os.path.basename(s) s = os.path.splitext(s)[0] elif isinstance(param, ParameterBoolean): s = unicode(widget.currentIndex() == 0) elif isinstance(param, ParameterSelection): s = unicode(widget.currentText()) elif isinstance(param, ParameterFixedTable): s = unicode(widget.table) else: s = unicode(widget.text()) name = filename[:filename.rfind('.')] + s \ + filename[filename.rfind('.'):] self.table.cellWidget(i + self.row, self.col).setValue(name) except: pass
def setDistShapeFile(self): (distShapefilePathNameText, fileTypeDetailsText) = QFileDialog.getSaveFileName( self, 'Save new shapefile', '*.shp') self.filePathlineEdit.setText(distShapefilePathNameText)
def ras2dSaveMeshPtsToGeometry(rgis, geoFileName=None): """Saves mesh points from current schema and table 'mesh_pts' to HEC-RAS geometry file""" if not geoFileName: s = QSettings() lastGeoFileDir = s.value('rivergis/lastGeoDir', '') geoFileName, __ = QFileDialog.getSaveFileName( None, 'Target HEC-RAS geometry file', directory=lastGeoFileDir, filter='HEC-RAS geometry (*.g**)') if not geoFileName: return s.setValue('rivergis/lastGeoDir', os.path.dirname(geoFileName)) rgis.addInfo('<br><b>Saving 2D Flow Area to HEC-RAS geometry file...</b>') # get mesh points extent qry = ''' SELECT ST_XMin(ST_Collect(geom)) AS xmin, ST_XMax(ST_collect(geom)) AS xmax, ST_YMin(ST_collect(geom)) AS ymin, ST_YMax(ST_collect(geom)) AS ymax FROM "{0}"."MeshPoints2d"; ''' qry = qry.format(rgis.rdb.SCHEMA) pExt = rgis.rdb.run_query(qry, True)[0] xmin, xmax, ymin, ymax = [ pExt['xmin'], pExt['xmax'], pExt['ymin'], pExt['ymax'] ] buf = max(0.2 * (xmax - xmin), 0.2 * (ymax - ymin)) pExtStr = '{:.2f}, {:.2f}, {:.2f}, {:.2f}'.format(xmin - buf, xmax + buf, ymax + buf, ymin - buf) # get list of mesh areas qry = ''' SELECT "AreaID", "Name", ST_X(ST_Centroid(geom)) AS x, ST_Y(ST_Centroid(geom)) AS y, ST_NPoints(geom) AS ptsnr FROM "{0}"."FlowAreas2d"; ''' qry = qry.format(rgis.rdb.SCHEMA) t = '' for area in rgis.rdb.run_query(qry, True): qry = ''' SELECT ST_AsText(geom) AS geom FROM "{0}"."FlowAreas2d" WHERE "AreaID" = {1}; ''' qry = qry.format(rgis.rdb.SCHEMA, area['AreaID']) res = rgis.rdb.run_query(qry, True)[0]['geom'] ptsList = res[9:-2].split(',') ptsTxt = '' for pt in ptsList: x, y = [float(c) for c in pt.split(' ')] ptsTxt += '{:>16.4f}{:>16.4f}\n'.format(x, y) t += ''' Storage Area={0:<14},{1:14},{2:14} Storage Area Surface Line= {3:d} {4} Storage Area Type= 0 Storage Area Area= Storage Area Min Elev= Storage Area Is2D=-1 Storage Area Point Generation Data=,,, '''.format(area['Name'], area['x'], area['y'], area['ptsnr'], ptsTxt) qry = ''' SELECT ST_X(geom) AS x, ST_Y(geom) AS y FROM "{0}"."MeshPoints2d" WHERE "AreaID" = {1}; ''' qry = qry.format(rgis.schema, area['AreaID']) pkty = rgis.rdb.run_query(qry, True) coords = '' for i, pt in enumerate(pkty): if i % 2 == 0: coords += '{:16.2f}{:16.2f}'.format(float(pt['x']), float(pt['y'])) else: coords += '{:16.2f}{:16.2f}\n'.format(float(pt['x']), float(pt['y'])) t += '''Storage Area 2D Points= {0} {1} Storage Area 2D PointsPerimeterTime=25Jan2015 01:00:00 Storage Area Mannings=0.06 2D Cell Volume Filter Tolerance=0.003 2D Face Profile Filter Tolerance=0.003 2D Face Area Elevation Profile Filter Tolerance=0.003 2D Face Area Elevation Conveyance Ratio=0.02 '''.format(len(pkty), coords) if not os.path.isfile(geoFileName): createNewGeometry(geoFileName, pExtStr) geoFile = open(geoFileName, 'r') geoLines = geoFile.readlines() geoFile.close() geoFile = open(geoFileName, 'w') geo = "" for line in geoLines: if not line.startswith('Chan Stop Cuts'): geo += line else: geo += t geo += line geoFile.write(geo) geoFile.close() rgis.addInfo('Saved to:\n{}'.format(geoFileName))
def exportToCsv(self): saveFileName, __ = QFileDialog.getSaveFileName(None) if saveFileName: with open(saveFileName, 'w') as csvFile: csvWriter = csv.writer(csvFile, delimiter=',', quoting=csv.QUOTE_MINIMAL) headerWriter = ['District', 'Population', 'To Target'] for d in dataFieldList: headerWriter.append(d.name) csvWriter.writerow(headerWriter) for p in range(0, self.districts + 1): rowWriter = [str(p)] rowWriter.append(str(distPop[p])) rowWriter.append(str(self.targetpop - distPop[p])) for d in dataFieldList: if d.type == 1: self.attrdockwidget.tblPop.setItem( p, 3 + rowNum, QTableWidgetItem(str(d.field_sum[p]))) elif d.type == 2: if distPop[p] > 0: QgsMessageLog.logMessage( str(d.field_sum[p]) + " " + str(distPop[p])) rowWriter.append( str( round( float( float(d.field_sum[p]) / float(distPop[p])) * 100, 2)) + '%') else: rowWriter.append('0.00%') elif d.type == 3: if self.totalpop > 0: QgsMessageLog.logMessage( str(d.field_sum[p]) + " " + str(self.totalpop)) rowWriter.append( str( round( float( float(d.field_sum[p]) / float(self.totalpop)) * 100, 2)) + '%') else: rowWriter.append('0.00%') elif d.type == 4: if d.total_sum > 0: QgsMessageLog.logMessage( str(d.field_sum[p]) + " " + str(d.total_sum)) rowWriter.append( str( round( float( float(d.field_sum[p]) / float(d.total_sum)) * 100, 2)) + '%') else: rowWriter.append('0.00%') csvWriter.writerow(rowWriter)
def create_new_db( self, verno, user_select_CRS=True, EPSG_code='4326', set_locale=False, ): #CreateNewDB(self, verno): """Open a new DataBase (create an empty one if file doesn't exists) and set as default DB""" if user_select_CRS: EPSGID = str(self.ask_for_CRS(set_locale)[0]) else: EPSGID = EPSG_code QApplication.setOverrideCursor(Qt.WaitCursor) if EPSGID == '0' or not EPSGID: utils.pop_up_info("Cancelling...") else: # If a CRS is selectd, go on and create the database #path and name of new db if self.dbpath == '': self.dbpath = QFileDialog.getSaveFileName( None, "Ny tolknings-DB", "midv_tolkndb.sqlite", "Spatialite (*.sqlite)")[0] if not self.dbpath: QApplication.restoreOverrideCursor() return '' #create Spatialite database else: #delete the file if exists if os.path.exists(self.dbpath): try: os.remove(self.dbpath) except OSError as e: utils.pop_up_info("Error: %s - %s." % (e.filename, e.strerror)) QApplication.restoreOverrideCursor() return '' try: # creating/connecting the test_db self.conn = spatialite_connect(self.dbpath) # creating a Cursor self.cur = self.conn.cursor() self.cur.execute( "PRAGMA foreign_keys = ON" ) #Foreign key constraints are disabled by default (for backwards compatibility), so must be enabled separately for each database connection separately. except: utils.pop_up_info( "Impossible to connect to selected DataBase") QApplication.restoreOverrideCursor() return '' #First, find spatialite version versionstext = self.cur.execute( 'select spatialite_version()').fetchall() # load sql syntax to initialise spatial metadata, automatically create GEOMETRY_COLUMNS and SPATIAL_REF_SYS # then the syntax defines a Midvatten TOLKNINGS-db according to the loaded .sql-file if not int( versionstext[0][0][0] ) > 3: # which file to use depends on spatialite version installed utils.pop_up_info( "midv_tolkn plugin needs spatialite4.\nDatabase can not be created" ) return '' filenamestring = "create_tolkn_db.sql" SQLFile = os.path.join(os.sep, os.path.dirname(__file__), "sql_strings", filenamestring) qgisverno = Qgis.QGIS_VERSION #We want to store info about which qgis-version that created the db with open(SQLFile, 'r') as f: f.readline() # first line is encoding info.... try: for line in f: if not line: continue if line.startswith("#"): continue for replace_word, replace_with in [ ('CHANGETORELEVANTEPSGID', str(EPSGID)), ('CHANGETOPLUGINVERSION', str(verno)), ('CHANGETOQGISVERSION', str(qgisverno)), ('CHANGETOSPLITEVERSION', str(versionstext[0][0])) ]: line = line.replace(replace_word, replace_with) #replaced_line = line.replace('CHANGETOQGISVERSION',str(qgisverno)).replace('CHANGETOSPLITEVERSION',str(versionstext[0][0])) self.cur.execute( line ) # use tags to find and replace SRID and versioning info except Exception as e: utils.pop_up_info( 'Failed to create DB! sql failed:\n' + line + '\n\nerror msg:\n' + str(e)) except: utils.pop_up_info('Failed to create DB!') try: #spatial_ref_sys_aux not implemented until spatialite 4.3 self.cur.execute( r"""delete from spatial_ref_sys_aux where srid NOT IN ('%s', '4326')""" % EPSGID) except: pass self.cur.execute( r"""delete from spatial_ref_sys where srid NOT IN ('%s', '4326')""" % EPSGID) self.insert_datadomains() self.add_triggers() #self.cur.execute('vacuum') #FINISHED WORKING WITH THE DATABASE, CLOSE CONNECTIONS self.conn.commit() self.conn.close() #create SpatiaLite Connection in QGIS QSettings settings = QSettings() settings.beginGroup('/SpatiaLite/connections') settings.setValue( '%s/sqlitepath' % os.path.basename(self.dbpath), '%s' % self.dbpath) settings.endGroup() #Finally add the layer styles info into the data base AddLayerStyles(self.dbpath) QApplication.restoreOverrideCursor()
def __new_project(self): fil, __ = QFileDialog.getSaveFileName( None, u"New project name (no space, plain ascii)", QgsProject.instance().readEntry("albion", "last_dir", "")[0], "QGIS poject file (*.qgs)", ) if not fil: return fil = fil if len(fil) > 4 and fil[-4:] == ".qgs" else fil + ".qgs" fil = fil.replace(" ", "_") if len(fil) != len(fil.encode()): self.__iface.messageBar().pushError( "Albion:", "project name may only contain asci character (no accent)" ) return srid, ok = QInputDialog.getText( self.__iface.mainWindow(), "Project SRID", "Project SRID EPSG:", QLineEdit.Normal, "32632", ) if not ok: return srid = int(srid) project_name = str(os.path.split(fil)[1][:-4]) if Project.exists(project_name): if ( QMessageBox.Yes != QMessageBox( QMessageBox.Information, "Delete existing DB", "Database {} exits, do you want to delete it ?".format( project_name ), QMessageBox.Yes | QMessageBox.No, ).exec_() ): self.__iface.messageBar().pushInfo("Albion:", "keeping existing database...") else: Project.delete(project_name) self.__iface.messageBar().pushInfo("Albion:", "creating project...") Project.create(project_name, srid) else: self.__iface.messageBar().pushInfo("Albion:", "creating project...") Project.create(project_name, srid) if os.path.exists(fil): os.remove(fil) # load template open(fil, "w").write( open(resource("template_project.qgs")) .read() .replace("template_project", project_name) .replace("32632", str(srid)) ) self.__iface.newProject() QgsProject.instance().setFileName(fil) QgsProject.instance().read() QgsProject.instance().writeEntry("albion", "project_name", project_name) QgsProject.instance().writeEntry("albion", "srid", srid) QgsProject.instance().write() self.__qgis__project__loaded()
def toolButtonOut(self): self.outEpanetName = QFileDialog.getSaveFileName(None, 'Save File', os.path.join(os.path.join(os.path.expanduser('~')), 'Desktop'), 'Epanet Inp File (*.inp)') self.dlg.out.setText(self.outEpanetName[0])
def save_scenario(self, scenario_file_path=None): """Save current scenario to a text file. You can use the saved scenario with the batch runner. :param scenario_file_path: A path to the scenario file. :type scenario_file_path: str """ # Validate Input warning_title = tr('InaSAFE Save Scenario Warning') is_valid, warning_message = self.validate_input() if not is_valid: # noinspection PyCallByClass,PyTypeChecker,PyArgumentList QMessageBox.warning(self, warning_title, warning_message) return # Make extent to look like: # 109.829170982, -8.13333290561, 111.005344795, -7.49226294379 # Added in 2.2 to support user defined analysis extents if self.dock.extent.user_extent is not None \ and self.dock.extent.crs is not None: # In V4.0, user_extent is QgsGeometry. user_extent = self.dock.extent.user_extent.boundingBox() extent = extent_to_array(user_extent, self.dock.extent.crs) else: extent = viewport_geo_array(self.iface.mapCanvas()) extent_string = ', '.join(('%f' % x) for x in extent) exposure_path = self.exposure_layer.source() hazard_path = self.hazard_layer.source() title = self.keyword_io.read_keywords(self.hazard_layer, 'title') title = tr(title) default_filename = title.replace(' ', '_').replace('(', '').replace(')', '') # Popup a dialog to request the filename if scenario_file_path = None dialog_title = tr('Save Scenario') if scenario_file_path is None: # noinspection PyCallByClass,PyTypeChecker scenario_file_path, __ = QFileDialog.getSaveFileName( self, dialog_title, os.path.join(self.output_directory, default_filename + '.txt'), "Text files (*.txt)") if scenario_file_path is None or scenario_file_path == '': return self.output_directory = os.path.dirname(scenario_file_path) # Write to file parser = ConfigParser() parser.add_section(title) # Relative path is not recognized by the batch runner, so we use # absolute path. parser.set(title, 'exposure', exposure_path) parser.set(title, 'hazard', hazard_path) parser.set(title, 'extent', extent_string) if self.dock.extent.crs is None: parser.set(title, 'extent_crs', 'EPSG:4326') else: parser.set(title, 'extent_crs', self.dock.extent.crs.authid()) if self.aggregation_layer is not None: aggregation_path = self.aggregation_layer.source() relative_aggregation_path = self.relative_path( scenario_file_path, aggregation_path) parser.set(title, 'aggregation', relative_aggregation_path) # noinspection PyBroadException try: of = open(scenario_file_path, 'a') parser.write(of) of.close() except Exception as e: # noinspection PyTypeChecker,PyCallByClass,PyArgumentList QMessageBox.warning( self, 'InaSAFE', tr('Failed to save scenario to {path}, exception ' '{exception}').format(path=scenario_file_path, exception=str(e))) finally: of.close() # Save State self.save_state()