def uploadHeader(self): """Import header from ASCII or TXT file. This function open a QFileDialog() to select and open an ASC file. The beginning of this file (ie. the header) is parsed to get value and to fill corresponding widget parameter value. The goal is to automate the filling of the parameters to improve the user experience Example of file header: ``` ncols 144 nrows 138 xllcorner 312487.6891250734 yllcorner 2397321.4964859663 cellsize 10.0 NODATA_value -1 ``` """ # Select the file with a QFileDialog() dlg = QFileDialog() dlg.setFileMode(QFileDialog.AnyFile) #dlg.setFilter("ASC File (*.asc);; TXT File (*.txt);;All File (*.*)") dlg.setNameFilters( ["All File (*.*)", "ASC File (*.asc)", "TXT File (*.txt)"]) dlg.selectNameFilter("All File (*.*)") filenames = '' if dlg.exec_(): filenames = dlg.selectedFiles() if filenames != '': # Open the file and parse header data with open(str(filenames[0]), 'r') as infile: for line in infile: values = line.strip().split(' ') if values[0] == "ncols": ChloeUtils.wrapperSetValue(self.wrappers["N_COLS"], int(values[1])) elif values[0] == "nrows": ChloeUtils.wrapperSetValue(self.wrappers["N_ROWS"], float(values[1])) elif values[0] == "xllcorner": ChloeUtils.wrapperSetValue(self.wrappers["XLL_CORNER"], float(values[1])) elif values[0] == "yllcorner": ChloeUtils.wrapperSetValue(self.wrappers["YLL_CORNER"], float(values[1])) elif values[0] == "cellsize": ChloeUtils.wrapperSetValue(self.wrappers["CELL_SIZE"], float(values[1])) elif values[0] == "NODATA_value": ChloeUtils.wrapperSetValue( self.wrappers["NODATA_VALUE"], int(values[1])) else: break
def showOpen(self): startdir = '.' filters = QgsProviderRegistry.instance().fileRasterFilters() lastFilter = "Multi-resolution Seamless Image Database (*.sid *.SID)" dlg = QFileDialog(self) dlg.setWindowTitle("Open raster") dlg.setFileMode(QFileDialog.ExistingFile) dlg.setNameFilter(filters) dlg.selectNameFilter(lastFilter) dlg.fileSelected.connect(self.openFile) dlg.show()
def on_file_browse(self): settings = QSettings() # look for directory path = QgsProject.instance().homePath() if path == "": path = settings.value("mask/file_dir", "") if path == "": path = QDir.homePath() drivers = QgsVectorFileWriter.ogrDriverList() filterList = [] filterMap = {} for driver in drivers: # grrr, driverMetadata is not really consistent if driver.driverName == "ESRI Shapefile": ext = "shp" glob = "*.shp" else: md = QgsVectorFileWriter.MetaData() if QgsVectorFileWriter.driverMetadata(driver.driverName, md): ext = md.ext glob = md.glob else: continue fn = "%s (%s)" % (driver.longName, glob) filterMap[fn] = (driver.driverName, ext, glob) filterList += [fn] fileFilters = ";;".join(filterList) fd = QFileDialog( None, self.tr("Select a filename to save the mask layer to"), path, fileFilters, ) save_format_name = self.parameters.file_format self.save_format = None for k, v in filterMap.items(): if v[0] == save_format_name: self.save_format = v fd.selectNameFilter(k) break def on_filter_selected(ff): self.save_format = filterMap[ff] fd.filterSelected.connect(on_filter_selected) fd.setAcceptMode(QFileDialog.AcceptSave) r = fd.exec_() if r == 1: fn = fd.selectedFiles()[0] driver, ext, glob = self.save_format if not fn.endswith("." + ext): fn += "." + ext self.ui.filePath.setText(fn) self.ui.formatLbl.setText(self.save_format[0]) self.parameters.file_format = self.save_format[0] self.parameters.file_path = fn