def save_y_values(self): if not self.tableWidget.rowCount(): return False csv_string = 'parameter,values\n' for value in self.tab: csv_string += str(value) + '\n' last_directory = get_last_input_path() # noinspection PyArgumentList output_file = QFileDialog.getSaveFileName( parent=self, caption=tr('Select file'), directory=last_directory, filter='CSV (*.csv)') if output_file: path = dirname(output_file) set_last_input_path(path) fh = open(output_file, 'w') fh.write(csv_string) fh.close() return True
def save_table(self): if not self.tableWidget.rowCount(): return False csv_string = 'parameter,values\n' for i in range(self.tableWidget.rowCount()): item_param = self.tableWidget.item(i, 0) item_value = self.tableWidget.item(i, 1) csv_string += \ str(item_param.text()) + ',' + item_value.text() + '\n' last_directory = get_last_input_path() # noinspection PyArgumentList output_file = QFileDialog.getSaveFileName( parent=self, caption=tr('Select file'), directory=last_directory, filter='CSV (*.csv)') if output_file: path = dirname(output_file) set_last_input_path(path) fh = open(output_file, 'w') fh.write(csv_string) fh.close() return True
def import_layer_from_csv(parent, csv_path, layer_name, iface, longitude_field='lon', latitude_field='lat', delimiter=',', quote='"', lines_to_skip_count=0, wkt_field=None, save_as_shp=False, dest_shp=None, zoom_to_layer=True, has_geom=True): url = QUrl.fromLocalFile(csv_path) url.addQueryItem('type', 'csv') if has_geom: if wkt_field is not None: url.addQueryItem('wktField', wkt_field) else: url.addQueryItem('xField', longitude_field) url.addQueryItem('yField', latitude_field) url.addQueryItem('spatialIndex', 'no') url.addQueryItem('crs', 'epsg:4326') url.addQueryItem('subsetIndex', 'no') url.addQueryItem('watchFile', 'no') url.addQueryItem('delimiter', delimiter) url.addQueryItem('quote', quote) url.addQueryItem('skipLines', str(lines_to_skip_count)) url.addQueryItem('trimFields', 'yes') layer_uri = str(url.toEncoded()) layer = QgsVectorLayer(layer_uri, layer_name, "delimitedtext") if save_as_shp: dest_filename = dest_shp or QFileDialog.getSaveFileName( parent, 'Save loss shapefile as...', os.path.expanduser("~"), 'Shapefiles (*.shp)') if dest_filename: if dest_filename[-4:] != ".shp": dest_filename += ".shp" else: return result = save_layer_as_shapefile(layer, dest_filename) if result != QgsVectorFileWriter.NoError: raise RuntimeError('Could not save shapefile') layer = QgsVectorLayer(dest_filename, layer_name, 'ogr') if layer.isValid(): QgsMapLayerRegistry.instance().addMapLayer(layer) iface.setActiveLayer(layer) if zoom_to_layer: iface.zoomToActiveLayer() else: msg = 'Unable to load layer' log_msg(msg, level='C', message_bar=iface.messageBar()) return None return layer
def exportText(self): projFolder = self.settings.value('projFolder') if self.settings.value('profileTextExport') == '.txt': exportFile = QFileDialog.getSaveFileName( directory=projFolder, filter='Text files(*.txt)') exportFile = toUnicode(exportFile) if self.profiles and exportFile: f = open(exportFile, 'w') if self.dlg.batchChecker.checkState() == 0: plotTool().exportToTxt(self.profiles, f) elif self.dlg.batchChecker.checkState() == 2: layer = self.dlg.layerCombo.currentLayer() self.batchExportAsTxt(layer, f) f.close() elif self.settings.value('profileTextExport') == '.csv': exportFile = QFileDialog.getSaveFileName( directory=projFolder, filter='Text files(*.csv)') exportFile = toUnicode(exportFile) if self.profiles and exportFile: f = open(exportFile, 'w') if self.dlg.batchChecker.checkState() == 0: plotTool().exportToCsv(self.profiles, f) elif self.dlg.batchChecker.checkState() == 2: layer = self.dlg.layerCombo.currentLayer() self.batchExportAsCsv(layer, f) f.close() elif self.settings.value('profileTextExport') == '.xls': exportFile = QFileDialog.getSaveFileName( directory=projFolder, filter='Excel Workbook(*.xls)') exportFile = toUnicode(exportFile) if self.profiles and exportFile: wb = xlwt.Workbook() if self.dlg.batchChecker.checkState() == 0: sh = wb.add_sheet('profile') plotTool().exportToXls(self.profiles, sh) elif self.dlg.batchChecker.checkState() == 2: layer = self.dlg.layerCombo.currentLayer() self.batchExportAsXls(layer, wb) wb.save(exportFile)
def select_file(self): last_folder = get_last_input_path() # noinspection PyArgumentList output_file = QFileDialog.getSaveFileName(parent=self, caption=tr('Select file'), directory=last_folder, filter='Shapefiles (*.shp)') if output_file: self.lineEdit_outputFile.setText(output_file) path = dirname(output_file) set_last_input_path(path) else: self.lineEdit_outputFile.setText('')
def genReport(self): tec = self.tecItemList.currentItem() projFolder = self.settings.value('projFolder') saveFile = QFileDialog.getSaveFileName(filter=self.tr('*.txt;; *.csv'), directory=projFolder) if saveFile.endswith('.txt'): self.reportAsTxt(tec, saveFile) elif saveFile.endswith('.csv'): self.reportAsCsv(tec, saveFile) else: QMessageBox(QMessageBox.Critical, title=toUnicode(MSG['msg26']), text=toUnicode(MSG['msg25']))
def import_loss_layer_from_csv(self, csv_file_path, dest_shp=None, delete_lon_lat=False): # FIXME: hardcoded field names longitude_field = 'LON' latitude_field = 'LAT' lines_to_skip_count = count_heading_commented_lines(csv_file_path) url = QUrl.fromLocalFile(csv_file_path) url.addQueryItem('type', 'csv') url.addQueryItem('xField', longitude_field) url.addQueryItem('yField', latitude_field) url.addQueryItem('spatialIndex', 'no') url.addQueryItem('subsetIndex', 'no') url.addQueryItem('watchFile', 'no') url.addQueryItem('delimiter', ',') url.addQueryItem('crs', 'epsg:4326') url.addQueryItem('skipLines', str(lines_to_skip_count)) url.addQueryItem('trimFields', 'yes') layer_uri = str(url.toEncoded()) csv_layer = QgsVectorLayer(layer_uri, 'Loss', "delimitedtext") dest_filename = dest_shp or QFileDialog.getSaveFileName( self, 'Save loss shapefile as...', os.path.expanduser("~"), 'Shapefiles (*.shp)') if dest_filename: if dest_filename[-4:] != ".shp": dest_filename += ".shp" else: return result = save_layer_as_shapefile(csv_layer, dest_filename) if result != QgsVectorFileWriter.NoError: raise RuntimeError('Could not save shapefile') shp_layer = QgsVectorLayer( dest_filename, 'Loss data', 'ogr') if delete_lon_lat: ProcessLayer(shp_layer).delete_attributes( [longitude_field, latitude_field]), if shp_layer.isValid(): QgsMapLayerRegistry.instance().addMapLayer(shp_layer) else: msg = 'Invalid loss map' log_msg(msg, level='C', message_bar=self.iface.messageBar()) return None return shp_layer
def outTIF(self, plotWidget, d_folder, name, title): if d_folder: fileName = os.path.join(d_folder, name + '.tif') else: if self.settings.value('lastOutputDir'): folder = self.settings.value('lastOutputDir') else: folder = self.settings.value('projFolder') fileName = QFileDialog.getSaveFileName( caption="Save Plot As .tif file", directory=folder, filter="Tagged Image File Format (*.tif;*.tiff)") fileName = toUnicode(fileName) if fileName: if not title: title = self.settings.value('figureTitle') plotWidget.setTitle(title) pix = QPixmap(QSize(600, 400)) sh = QBrush(pix) sh.setColor(Qt.white) sh.setStyle(Qt.SolidPattern) painter = QPainter() painter.begin(pix) painter.setBrush(sh) painter.drawRect(0, 0, 600, 400) painter.end() legend = QwtLegend() plotWidget.insertLegend(legend) plotWidget.setAxisTitle(QwtPlot.xBottom, self.settings.value('xAxisTitle')) plotWidget.setAxisTitle(QwtPlot.yLeft, self.settings.value('yAxisTitle')) QSettings().setValue("lastOutputDir", os.path.dirname(fileName)) filter = QwtPlotPrintFilter() filter.setOptions(QwtPlotPrintFilter.PrintAll & ~QwtPlotPrintFilter.PrintBackground) plotWidget.print_(pix, filter) pix.save(fileName) plotWidget.insertLegend(None) plotWidget.setAxisTitle(QwtPlot.xBottom, None) plotWidget.setAxisTitle(QwtPlot.yLeft, None) plotWidget.setTitle(None)
def outSVG(self, plotWidget, d_folder, name, title): if d_folder: fileName = os.path.join(d_folder, name + '.svg') else: if self.settings.value('lastOutputDir'): folder = self.settings.value('lastOutputDir') else: folder = self.settings.value('projFolder') fileName = QFileDialog.getSaveFileName( caption="Save Plot As .svg file", directory=folder, filter="Scalable Vector Graphics(*.svg)") fileName = toUnicode(fileName) if fileName: pix = QSvgGenerator() pix.setFileName(fileName) pix.setSize(QSize(600, 400)) if not title: title = self.settings.value('figureTitle') plotWidget.setTitle(title) legend = QwtLegend() plotWidget.insertLegend(legend) plotWidget.setAxisTitle(QwtPlot.xBottom, self.settings.value('xAxisTitle')) plotWidget.setAxisTitle(QwtPlot.yLeft, self.settings.value('yAxisTitle')) QSettings().setValue("lastOutputDir", os.path.dirname(fileName)) filter = QwtPlotPrintFilter() filter.setOptions(QwtPlotPrintFilter.PrintAll & ~QwtPlotPrintFilter.PrintBackground) plotWidget.print_(pix, filter) plotWidget.insertLegend(None) plotWidget.setAxisTitle(QwtPlot.xBottom, None) plotWidget.setAxisTitle(QwtPlot.yLeft, None) plotWidget.setTitle(None)
def ask_for_destination_full_path_name(parent, text='Save File', filter='Shapefiles (*.shp)'): """ Open a dialog to ask for a destination full path name, initially pointing to the home directory. QFileDialog by defaults asks for confirmation if an existing file is selected and it automatically resolves symlinks. :param parent: the parent dialog :param text: the dialog's title text :param filter: filter files by specific formats. Default: 'Shapefiles (\*.shp)' A more elaborate example: "Images (\*.png \*.xpm \*.jpg);; Text files (\*.txt);;XML files (\*.xml)" :returns: full path name of the destination file """ return QFileDialog.getSaveFileName(parent, text, directory=os.path.expanduser("~"), filter=filter)