def saveImage(self): """ Provides a dialog window to allow the user to save the image file. """ imageFile, _ = QFileDialog.getSaveFileName( self, "Choose a filename to save the image", "", "Images (*.png)") info = QFileInfo(imageFile) if info.baseName() != "": newImageFile = QFileInfo(info.absoluteDir(), info.baseName() + ".png").absoluteFilePath() if not self.finalWidget.pixmap().save(newImageFile, "PNG"): QMessageBox.warning( self, "Cannot save file", "The file could not be saved.", QMessageBox.Cancel, QMessageBox.NoButton, QMessageBox.NoButton, ) else: QMessageBox.warning( self, "Cannot save file", "Please enter a valid filename.", QMessageBox.Cancel, QMessageBox.NoButton, QMessageBox.NoButton, )
def getfiles(self): """ Load files from directory """ fname = QFileDialog.getOpenFileName(self, 'Open file', 'c:\\', "Text Files (*.txt)") fi = QFileInfo(fname[0]) global trackers_paths trackers_paths.append(fname[0]) self.trackers_res.append(fi.baseName()) # update List Options self.listwidget.insertItem(len(self.trackers_res), "%s" % fi.baseName()) # print(self.trackers_res) self.listwidget.repaint() self.update()
def on_btnAdd_clicked(self): ## curPath=os.getcwd() #获取系统当前目录 ## curPath=QDir.homePath() curPath = QDir.currentPath() dlgTitle = "选择音频文件" filt = "音频文件(*.mp3 *.wav *.wma);;所有文件(*.*)" fileList, flt = QFileDialog.getOpenFileNames(self, dlgTitle, curPath, filt) count = len(fileList) if count < 1: return filename = fileList[0] fileInfo = QFileInfo(filename) #文件信息 QDir.setCurrent(fileInfo.absolutePath()) #重设当前路径 for i in range(count): filename = fileList[i] fileInfo.setFile(filename) song = QMediaContent(QUrl.fromLocalFile(filename)) self.playlist.addMedia(song) #添加播放媒体 ## basename=os.path.basename(filename) #文件名和后缀 basename = fileInfo.baseName() self.ui.listWidget.addItem(basename) #添加到界面文件列表 if (self.player.state() != QMediaPlayer.PlayingState): self.playlist.setCurrentIndex(0) self.player.play()
def loadMap(self, fullpath): print(fullpath) info = QFileInfo(fullpath) basename = info.baseName() suffix = info.suffix() print(basename) print(suffix) if suffix == 'shp': print('vector') # 打开矢量图层 self.layer = QgsVectorLayer(fullpath, basename, "ogr") if not self.layer: print("failed") else: print('raster') #打开栅格图层 self.layer = QgsRasterLayer(fullpath, basename, "gdal") if not self.layer: print("failed") # 注册图层 QgsProject.instance().addMapLayer(self.layer) self.mapCanvas.setLayers([self.layer]) #设置图层范围 self.mapCanvas.setExtent(self.layer.extent()) self.mapCanvas.refresh()
def fopen(self, filename): fname = QFileInfo(filename) self.filePath = str(fname.absolutePath()) fn = str(fname.baseName()) main = NewEditorMainWindow(fn, self.filePath, self.library) self.library.mainWins.append(main) main.show()
def replaceImage(self, filepath, title): self.title = title self.filepath = filepath # set custom properties self.setCustomProperty("title", title) self.setCustomProperty("filepath", self.filepath) self.setName(title) fileInfo = QFileInfo(filepath) ext = fileInfo.suffix() if ext == "pdf": s = QSettings() oldValidation = s.value("/Projections/defaultBehavior") s.setValue( "/Projections/defaultBehavior", "useGlobal" ) # for not asking about crs path = fileInfo.filePath() baseName = fileInfo.baseName() layer = QgsRasterLayer(path, baseName) self.image = layer.previewAsImage(QSize(layer.width(), layer.height())) s.setValue("/Projections/defaultBehavior", oldValidation) else: reader = QImageReader(filepath) self.image = reader.read() self.repaint()
def generate_pj_info(self): """ triggered by button add 1. create new project info dict every time 2. extract project name and address from LineEdit; check if exist and if it is cas and msh file 3. when second step done, get journal path from get_journal function :return: signal_add_pj(dict) """ self.pj_dict = { "project_name": '', "project_address": '', "journal": '' } if self.checkbox_journal.isChecked(): case_path = QFileInfo(self.edit_journal_address.text()) else: case_path = QFileInfo(self.edit_project_address.text() ) # QFileInfo can deeply analyze path info accepted_file_type = ['cas', 'msh', 'h5', 'jou'] if (case_path.exists()) and (case_path.suffix() in accepted_file_type): self.pj_dict["project_name"] = case_path.baseName() self.pj_dict["project_address"] = case_path.absolutePath() self.pj_dict['journal'] = self.get_journal(case_path, case_path.fileName()) self.signal_add_pj.emit(self.pj_dict) self.close() print('generate new project:', self.pj_dict) else: QMessageBox.warning(self, self.make_trans('warning'), self.make_trans('no_case_mesh'), QMessageBox.Yes, QMessageBox.Yes) print('file not exists')
def pBtn_RunClicked(self): fi = QFileInfo(self.lnEdit_Prog.text()) #runName=fi.baseName() ns3path = os.path.dirname(fi.dir().path()) ns3path = os.path.dirname(ns3path) self.exepath = os.path.dirname(ns3path) routingName = self.cmBox_RoutingName.currentText() simSpan = self.cmBox_SimulationSpan.currentText() pool = Pool(processes=self.spinBox_processes.value()) cmds = {} for traffic in range(string.atoi(self.lnEdit_loadStart.text()), string.atoi(self.lnEdit_loadEnd.text()), string.atoi(self.lnEdit_loadStep.text())): if fi.suffix() == "cpp": cmds[ traffic] = "./waf --run='{1} --routingName={3} --simulationSpan={2} --InterestsPerSec={0}'".format( traffic, fi.baseName(), simSpan, routingName) else: cmds[ traffic] = "./waf --pyrun='{1} --routingName={3} --simulationSpan={2} --InterestsPerSec={0}'".format( traffic, 'src/ndnSIM/examples/' + fi.fileName(), simSpan, routingName) res = pool.apply_async(runJob, args=(cmds[traffic], self.exepath), callback=self.invokeRefresh) self.listWidget_activeProg.addItem(cmds[traffic]) #res.wait() #print(res.get()) pool.close() #关闭线程池,不再接收新任务 #proc=Process(target=ajob.runJob, args=("./waf --run='ndn-zhangyu-multipath --simulationSpan=50 --InterestsPerSec=50'", os.environ['HOME']+"/ndnSIM20170130/ns-3/")) #proc.start() #proc.join() self.refreshGUI("")
def read_qgsrasterlayer_from_file(spatial_data_file_abs): """ Reads the full pathname of spatial data file and returns a QGSRasterLayer object. Args: spatial_data_file_abs (str): the full pathname to a spatial data file Raises: IOError if the file is invalid. Returns: A QGSRasterLayer object containing the data from the input spatial data file. """ # Get the filename and basename of the input raster file. fileInfo = QFileInfo(spatial_data_file_abs) path = fileInfo.filePath() baseName = fileInfo.baseName() # Create the QgsRasterLayer object. qgs_raster_layer_obj = QgsRasterLayer(path, baseName) # Return the QgsRasterLayer if it is valid. if qgs_raster_layer_obj.isValid(): return qgs_raster_layer_obj # If the created QGSRasterLayer object is invalid, print an error message and return None. else: message = 'The QGSRasterLayer for file "{}" is invalid.'.format( spatial_data_file_abs) logger = logging.getLogger(__name__) logger.warning(message) raise IOError(message)
def configure(self, machineType, machineConfig, machinePort, machineStart): it = QDirIterator(self.dataConfigDir, ['*.cfg.json']) while it.hasNext(): fileInfo = QFileInfo(it.next()) basename = fileInfo.baseName() self.machineConfigCB.addItem(basename) self.reloadSettings()
def onQuit(self): for d in self.__decompfiles: fileInfo = QFileInfo(d) baseName = fileInfo.baseName() layer = qgis.utils.iface.addRasterLayer(d, baseName) self.controlenable(True) QtWidgets.QMessageBox.about(self, "FG GML Importer", "終了しました") self.__running__ = False
def save_layer(self): layer = self.view.currentLayer() # if it is a vector layer and has a valid geometry if layer.type() == 0 and layer.geometryType() not in [3, 4]: layer_name, selected_filter = QFileDialog.getSaveFileName( None, 'Save Layer', "", 'Shapefile (*.shp);;KML (*.kml);;GPX (*.gpx)') if layer_name != '': if selected_filter == "Shapefile (*.shp)": if not layer_name.endswith('.shp'): layer_name = layer_name + '.shp' ret = QgsVectorFileWriter.writeAsVectorFormat( layer, layer_name, "utf-8", QgsCoordinateReferenceSystem( 4326, QgsCoordinateReferenceSystem.EpsgCrsId), "ESRI Shapefile") if ret == QgsVectorFileWriter.NoError: logger.info(layer.name() + " saved to " + layer_name) # After saving always delete layer and reload from saved file renderer = layer.renderer() file_info = QFileInfo(layer_name) base_name = file_info.baseName() vlayer = QgsVectorLayer(layer_name, base_name, "ogr") if not vlayer.isValid(): logger.warning("Layer failed to load!") vlayer.setRenderer(renderer.clone()) self.remove_layer() self.proj.addMapLayer(vlayer) elif selected_filter == "KML (*.kml)": if not layer_name.endswith('.kml'): layer_name = layer_name + '.kml' file_info = QFileInfo(layer_name) QgsVectorFileWriter.writeAsVectorFormat( layer, layer_name, "utf-8", QgsCoordinateReferenceSystem( 4326, QgsCoordinateReferenceSystem.EpsgCrsId), "KML") elif selected_filter == "GPX (*.gpx)": if not layer_name.endswith('.gpx'): layer_name = layer_name + '.gpx' ds_options = list() ds_options.append("GPX_USE_EXTENSIONS=TRUE" ) # Option needed to write gpx correctly QgsVectorFileWriter.writeAsVectorFormat( layer, layer_name, "utf-8", QgsCoordinateReferenceSystem( 4326, QgsCoordinateReferenceSystem.EpsgCrsId), "GPX", datasourceOptions=ds_options)
def vector_load_file(self): """ Open dialog to load vector layer.""" self.vector_filename, __ = QFileDialog.getOpenFileName(self, 'Vector Layer from File', QDir.homePath(), "Vector Layer(*.shp *.kml *.osm *.gpx) ;; All files (*.*)") if self.vector_filename: file_info = QFileInfo(self.vector_filename) self.vector_base_name = file_info.baseName() self.vector_file_extension = file_info.suffix() self.vector_file_lineEdit.setText(str(self.vector_filename)) self.vector_name_lineEdit.setText(str(self.vector_base_name))
def addAnnotationButtonClicked(self): self.resetSelectionBand() labelIndex = self.labelComboBox.currentIndex() if labelIndex < 0: messageBox = QMessageBox() messageBox.setIcon(QMessageBox.Information) messageBox.setText("Label is not selected.") messageBox.exec_() return currentMapTool = iface.mapCanvas().mapTool() if not isinstance(currentMapTool, SelectMapTool): messageBox = QMessageBox() messageBox.setIcon(QMessageBox.Information) messageBox.setText("Object is not selected.") messageBox.exec_() return if not currentMapTool.isValid(): messageBox = QMessageBox() messageBox.setIcon(QMessageBox.Information) messageBox.setText("Selection is not valid.") messageBox.exec_() return information = currentMapTool.getInformation() if information is None: messageBox = QMessageBox() messageBox.setIcon(QMessageBox.Information) messageBox.setText("Information cannot be retrieved.") messageBox.exec_() return crs = information.getCRS() aY, aX, bY, bX = information.getAbsoluteSelection() c1, c2 = information.getCoordinates() file = QFileInfo(information.getDataSource()) row = [ self.labelComboBox.currentText(), file.baseName(), file.filePath(), crs.authid(), str(aY), str(aX), str(bY), str(bX), str(c1.x()), str(c1.y()), str(c2.x()), str(c2.y()) ] self.model.appendRow([QStandardItem(item) for item in row]) currentMapTool.reset()
def raster_load_file(self): """ Open dialog to load raster layer.""" self.raster_filename, __ = QFileDialog.getOpenFileName(self, 'Vector Layer from File', QDir.homePath(), "Raster Layer(*.tif) ;; All files (*.*)") if self.raster_filename: file_info = QFileInfo(self.raster_filename) self.raster_base_name = file_info.baseName() self.raster_file_lineEdit.setText(str(self.raster_filename)) self.raster_name_lineEdit.setText(str(self.raster_base_name))
def get_nome_progetto(self): """ # Slot for exposing the same-name function to Javascript. # Retrieve the project name having the whitespaces replaced with underscores. """ project_file_name = QFileInfo(QgsProject.instance().fileName()) project_name = project_file_name.baseName() # Replacement for the whitespaces with underscore project_name = project_name.replace(" ", "_") return project_name
def addFilesToExplorer(self, fileName, fileType, scaler, extensionTag, isVideo=True): if fileName: info = QFileInfo(fileName) if info.baseName() == self.importedVideo and isVideo: QMessageBox.critical(self, "Error", "Video already exist", buttons=QMessageBox.Ok) elif info.baseName() == self.importedCSV and not isVideo: QMessageBox.critical(self, "Error", "CSV file already exist", buttons=QMessageBox.Ok) else: if (isVideo): self.removeItemFromTable("video") self.importedVideoPath = QUrl.fromLocalFile(fileName) self.importedVideo = info.baseName() cap = cv2.VideoCapture(r'{}'.format( self.importedVideoPath.toString())) fps = cap.get(cv2.CAP_PROP_FPS ) # OpenCV2 version 2 used "CV_CAP_PROP_FPS" frame_count = cap.get(cv2.CAP_PROP_FRAME_COUNT) self.durationChanged(int(frame_count / fps)) self.statusBar().showMessage('Status: Video/Image added') else: self.removeItemFromTable("csv") self.importedCSVPath = info.absoluteFilePath() self.readCSV(info.absoluteFilePath(), info.baseName()) self.statusBar().showMessage('Status: CSV File added') size = str(info.size() / scaler) + extensionTag last_modified = info.lastModified().toString()[4:10] self.addItemToTable( self.explorerView, [info.baseName(), size, fileType, last_modified])
def saveFile(self): if self.filename == 'untitled': self.saveFileAs() else: filename = self.filename if filename != '': fname = QFileInfo(filename) self.filename = str(fname.baseName()) self.filePath = str(fname.absolutePath()) self.setWindowTitle(self.filename) self.scene.saveDgm(self.getFullFileName()) self.modified = False
def Output(filename, output_dir, mod, suffix, rewrite=True, index=-1): """ Take input filename, output dir path, and make a new filename using mod and suffix. Rewrite a file by default. Can be used with Blister.Threading(). """ METHOD_NAME = f"Blister.Output" thread_id = Blister.ThreadID(index) if mod != "": mod = "_" + mod if (suffix != ""): suffix = "." + suffix fileinfo_old = QFileInfo(filename) fileinfo = QFileInfo(QDir(output_dir), fileinfo_old.baseName() + mod + suffix) if (fileinfo.exists() and (not fileinfo.isFile())): print(f"{thread_id}{METHOD_NAME}: This path is a dir:\n{thread_id}\t{fileinfo.absoluteFilePath()}", end='\n') return False if ((fileinfo.exists() and (not fileinfo.isWritable())) or ((not fileinfo.exists()) and (not QFileInfo(fileinfo.absolutePath()).permission(QFile.WriteUser)))): print(f"{thread_id}{METHOD_NAME}: Writing this file is not permitted:\n{thread_id}\t{fileinfo.absoluteFilePath()}", end='\n') return False if (fileinfo.exists() and (rewrite == False)): fileinfo = QFileInfo(QDir(output_dir), fileinfo_old.baseName()+ "_" + str(int(time.time()) % 100000) + suffix) print(f"{thread_id}{METHOD_NAME}: File to write already exists [rewriting is forbidden]. It will be renamed:\n{thread_id}\t{fileinfo_old.absoluteFilePath()} --> {fileinfo.absoluteFilePath()}", end='\n') return fileinfo.absoluteFilePath()
def saveImage(self): """ Provides a dialog window to allow the user to save the image file. """ imageFile, _ = QFileDialog.getSaveFileName(self, "Choose a filename to save the image", "", "Images (*.png)") info = QFileInfo(imageFile) if info.baseName() != '': newImageFile = QFileInfo(info.absoluteDir(), info.baseName() + '.png').absoluteFilePath() if not self.finalWidget.pixmap().save(newImageFile, 'PNG'): QMessageBox.warning(self, "Cannot save file", "The file could not be saved.", QMessageBox.Cancel, QMessageBox.NoButton, QMessageBox.NoButton) else: QMessageBox.warning(self, "Cannot save file", "Please enter a valid filename.", QMessageBox.Cancel, QMessageBox.NoButton, QMessageBox.NoButton)
def saveAsDocument(self, document): """ prompts the user for a new filename or path and saves the document as that :param document: Reference to the document :return: Returns if the save as succeeded or not """ new_path = \ QFileDialog.getSaveFileName(self.app, 'Save File', self.app.left_menu.model.rootPath())[ 0] # if the new path is an empty string do nothing if new_path == '': logging.warning("No New File Path Given") return False # check if the document is formatted if self.app.btn_mode_switch.isChecked(): f_info = QFileInfo(new_path) if f_info.suffix() != "lef": new_path = os.path.join(f_info.path(), f_info.baseName()) + '.lef' data = document.toHtml() else: f_info = QFileInfo(new_path) if f_info.suffix() == "lef": new_path = os.path.join(f_info.path(), f_info.baseName()) + '.txt' data = document.toPlainText() # now write to the new_path self.writeFileData(new_path, data) # add the document to the dict of documents self.open_documents[new_path] = QFileInfo(new_path) self.current_document = self.open_documents[new_path] self.file_opened_time = os.path.getatime(self.current_document.absoluteFilePath()) # open the document with its new text self.openDocument(document, new_path) logging.info("Saved File As - %s", new_path) return True
def layerSubsetSave(rasterLayer: QgsRasterLayer, domainLayer: QgsVectorLayer, rootGroup: QgsLayerTreeGroup, name: str) -> None: """Description: Processes a raster image into a vector polygon ocean/land mask. Make sure to save the shapefile, as it will be deleted otherwise! Input: QgsRasterLayer rasterLayer - layer that contains the raster image to process QgsVectorLayer domainLayer - layer that contains a polygon specifying the bounds of the raster image to process QgsLayerTreeGroup rootGroup - layer that contains the root name of the glacier Output: QgsRasterLayer, QgsVectorLayer - objects referencing the new mask layers """ # Get basic file name information on geotiff, raster image, masked raster subset image, and masked vector subset shp file fileSource = rasterLayer.source() fileInfo = QFileInfo(fileSource) filePath = fileInfo.absolutePath() fileName = fileInfo.baseName() subsetName = fileName + '_' + domainLayer.name() subsetPath = getSavePaths(fileSource, domainLayer, 'tif') + '/' + subsetName + '.tif' # Load geotiff and get domain layer/bounding box of area to mask geotiff = gdal.Open(fileSource) feature = domainLayer.getFeature(0) domain = feature.geometry().boundingBox() prj = geotiff.GetProjection() srs = osr.SpatialReference(wkt=prj) rasterCRS = srs.GetAttrValue( "PROJCS|AUTHORITY", 0) + ":" + srs.GetAttrValue("PROJCS|AUTHORITY", 1) if (rasterCRS is None): rasterCRS = srs.GetAttrValue("AUTHORITY", 0) + ":" + srs.GetAttrValue( "AUTHORITY", 1) crs = rasterLayer.crs() crs.createFromId(int(srs.GetAttrValue("AUTHORITY", 1))) rasterLayer.setCrs(crs) rasterLayer.triggerRepaint() #rasterCRS = rasterLayer.crs().authid() domainCRS = domainLayer.crs().authid() bounds = geotiffWorldToPixelCoords(geotiff, domain, rasterCRS, domainCRS) img = geotiff.GetRasterBand(1) img = img.ReadAsArray(0, 0, geotiff.RasterXSize, geotiff.RasterYSize).astype(np.uint16) img = img[int(round(bounds.yMinimum())):int(round(bounds.yMaximum())), int(round(bounds.xMinimum())):int(round(bounds.xMaximum()))] print('Save subset:', subsetPath) arrayToRaster(img, geotiff, bounds, subsetPath) imsave(resolve('landsat_raw/' + domainLayer.name() + '/' + name + '.png'), img) return img.shape
def currentRowChanged(self, selected, deselected): indexes = self.annotationView.selectedIndexes() if len(indexes) == 0: return rowIndex = indexes[0].row() targetLayer = None for node in QgsProject.instance().layerTreeRoot().findLayers(): layer = node.layer() if isinstance(layer, QgsRasterLayer) and layer.dataProvider( ).dataSourceUri() == self.model.item(rowIndex, 2).text(): targetLayer = layer break root = QgsProject.instance().layerTreeRoot() if targetLayer is None: file = QFileInfo(self.model.item(rowIndex, 2).text()) path = file.filePath() base = file.baseName() targetLayer = QgsRasterLayer(path, base) QgsProject.instance().addMapLayer(targetLayer, False) root.insertLayer(0, targetLayer) else: clonedLayer = targetLayer.clone() QgsProject.instance().removeMapLayer(targetLayer.id()) QgsProject.instance().addMapLayer(clonedLayer) targetLayer = clonedLayer iface.setActiveLayer(targetLayer) crs = QgsCoordinateReferenceSystem(self.model.item(rowIndex, 3).text()) QgsProject.instance().setCrs(crs) iface.mapCanvas().setExtent(targetLayer.extent()) point1 = QgsPointXY(float(self.model.item(rowIndex, 8).text()), float(self.model.item(rowIndex, 9).text())) point2 = QgsPointXY(float(self.model.item(rowIndex, 8).text()), float(self.model.item(rowIndex, 11).text())) point3 = QgsPointXY(float(self.model.item(rowIndex, 10).text()), float(self.model.item(rowIndex, 11).text())) point4 = QgsPointXY(float(self.model.item(rowIndex, 10).text()), float(self.model.item(rowIndex, 9).text())) self.resetSelectionBand() self.selectionBand.addPoint(point1, False) self.selectionBand.addPoint(point2, False) self.selectionBand.addPoint(point3, False) self.selectionBand.addPoint(point4, True) self.selectionBand.setOpacity(0.5) self.selectionBand.show()
def read_data(filename,band_no=1): fileInfo = QFileInfo(filename) baseName = fileInfo.baseName() layer = QgsRasterLayer(filename, baseName) if not layer.isValid(): print(filename+" layer failed to load!") ds = gdal.Open(filename) proj = ds.GetProjection() geotransform = ds.GetGeoTransform() band = ds.GetRasterBand(band_no) no_dat= band.GetNoDataValue() array = np.array(band.ReadAsArray(),dtype=np.float32) XSize,YSize=(band.XSize,band.YSize) return array,no_dat,proj,geotransform,XSize,YSize
def on_btnFile_copy_clicked(self): self.__showBtnInfo(self.sender()) sous=self.ui.editFile.text().strip() #源文件 if sous=="": self.ui.textEdit.appendPlainText("请先选择一个文件") return fileInfo=QFileInfo(sous) newFile=fileInfo.path()+"/"+fileInfo.baseName()+"--副本."+fileInfo.suffix() if QFile.copy(sous,newFile): self.ui.textEdit.appendPlainText("源文件:"+sous) self.ui.textEdit.appendPlainText("复制为文件:"+newFile+"\n") else: self.ui.textEdit.appendPlainText("复制文件失败")
def saveFileAs(self): filename = QFileDialog.getSaveFileName(self, 'Save', self.workingFolder + '/' + self.filename, filter='*.dgm') filename = filename[0] if filename != '': fname = QFileInfo(filename) self.filename = str(fname.baseName()) self.filePath = str(fname.absolutePath()) self.setWindowTitle(self.filename) self.scene.saveDgm(self.getFullFileName()) self.modified = False
def export_cfd_parameter(self): self.data_dict() print(self.input_d) # output = output_web(r'C:/Users/BZMBN4/Desktop/123.html', self.input_d) path = QFileDialog.getSaveFileName(self, filter='html, *.html') try: save_path = QFileInfo(path[0]) html_save_path = save_path.filePath() csv_save_path = save_path.absolutePath() + '\\' + save_path.baseName() + '.csv' output_html = output_web(html_save_path, self.input_d) output_csv = OutputCsv(csv_save_path, self.input_d) except Exception as e: print(e)
def on_btnFile_rename_clicked(self): self.__showBtnInfo(self.sender()) sous=self.ui.editFile.text().strip() #源文件 if sous=="": self.ui.textEdit.appendPlainText("请先选择一个文件") return fileInfo=QFileInfo(sous) newFile=fileInfo.path()+"/"+fileInfo.baseName()+".XZY" #更改文件后缀为".XYZ" if QFile.rename(sous,newFile): self.ui.textEdit.appendPlainText("源文件:"+sous) self.ui.textEdit.appendPlainText("重命名为:"+newFile+"\n") else: self.ui.textEdit.appendPlainText("重命名文件失败\n")
def loadRaster(self, raster): # Check if string is provided fileInfo = QFileInfo(raster) path = fileInfo.filePath() baseName = fileInfo.baseName() layer = QgsRasterLayer(path, baseName) QgsProject.instance().addMapLayer(layer) if layer.isValid() is True: self.dataDisplayDlg.appendLogs("Layer was loaded successfully!") else: self.dataDisplayDlg.appendLogs( "Unable to read basename and file path - Your array is probably invalid" )
def loadImages(self, fileNames): for fileName in fileNames: row = self.imagesTable.rowCount() self.imagesTable.setRowCount(row + 1) fileInfo = QFileInfo(fileName) imageName = fileInfo.baseName() fileImage2x = fileInfo.absolutePath( ) + '/' + imageName + "@2x." + fileInfo.suffix() fileInfo2x = QFileInfo(fileImage2x) image = QImage(fileName) toolTip = "Directory: {}\nFile: {}\nFile@2x: {}\nSize: {}x{}".format( QDir.toNativeSeparators(fileInfo.absolutePath()), fileInfo.fileName(), fileInfo2x.fileName() if fileInfo2x.exists else "<None>", image.width(), image.height()) fileItem = QTableWidgetItem(imageName) fileItem.setData(Qt.UserRole, fileName) fileItem.setIcon(QIcon(QPixmap.fromImage(image))) fileItem.setFlags((fileItem.flags() | Qt.ItemIsUserCheckable) & ~Qt.ItemIsEditable) fileItem.setToolTip(toolTip) self.imagesTable.setItem(row, 0, fileItem) mode = QIcon.Normal state = QIcon.Off if self.guessModeStateAct.isChecked(): if "_act" in imageName: mode = QIcon.Active elif "_dis" in imageName: mode = QIcon.Disabled elif "_sel" in imageName: mode = QIcon.Selected if "_on" in imageName: mode = QIcon.On modeItem = QTableWidgetItem(IconPreviewArea.iconModeNames()[ IconPreviewArea.iconModes().index(mode)]) modeItem.setToolTip(toolTip) self.imagesTable.setItem(row, 1, modeItem) stateItem = QTableWidgetItem(IconPreviewArea.iconStateNames()[ IconPreviewArea.iconStates().index(state)]) stateItem.setToolTip(toolTip) self.imagesTable.setItem(row, 2, stateItem) self.imagesTable.openPersistentEditor(modeItem) self.imagesTable.openPersistentEditor(stateItem) fileItem.setCheckState(Qt.Checked)
def qgis3_add_raster_to_project(iface, raster_path: Path) -> bool: """ Adds the Raster(raster_path) at the current open qgis project :type iface: qgis.gui.QgisInterface :type raster_path: Path """ # TODO: Refactor: NV: Feels like incorrect usage of the APIs q_file_info = QFileInfo(raster_path.as_posix()) q_base_name = q_file_info.baseName() q_raster_layer = QgsRasterLayer(q_file_info.filePath(), q_base_name) if q_raster_layer.isValid(): iface.addRasterLayer(raster_path.as_posix(), raster_path.name) return True
def browsePath(self): """用户点击了浏览路径的按钮。如果成功设置了路径,就返回True,如果用户取消了操作或者出错,就返回False 返回的用途参见showEvent()""" filename, selectedFilter = QFileDialog.getOpenFileName(self, self.windowTitle()) if not filename: return False fi = QFileInfo(filename) if fi.isSymLink(): filename = fi.symLinkTarget() if not os.path.exists(filename): QMessageBox.information(self, self.windowTitle(), self.tr("快捷方式所指向的程序不正确。")) return False fi = QFileInfo(filename) self.txtName.setText(fi.baseName()) self.txtPath.setText(fi.absoluteFilePath()) self.setFileIcon(fi.absoluteFilePath()) self.txtDir.setText(fi.dir().absolutePath()) return True
def replaceImage(self, filepath, title): self.title = title self.filepath = filepath # set custom properties self.setCustomProperty("title", title) self.setCustomProperty("filepath", self.filepath) self.setName(title) fileInfo = QFileInfo(filepath) ext = fileInfo.suffix() if ext == "pdf": s = QSettings() oldValidation = s.value("/Projections/defaultBehavior") s.setValue("/Projections/defaultBehavior", "useGlobal") # for not asking about crs path = fileInfo.filePath() baseName = fileInfo.baseName() layer = QgsRasterLayer(path, baseName) self.image = layer.previewAsImage(QSize(layer.width(), layer.height())) s.setValue("/Projections/defaultBehavior", oldValidation) else: reader = QImageReader(filepath) self.image = reader.read() self.repaint()
def initializeLayer(self, screenExtent=None): if self.error or self.initialized or self.initializing: return if self.filepath is not None: # not safe... self.initializing = True filepath = self.getAbsoluteFilepath() if not os.path.exists(filepath): # TODO integrate with BadLayerHandler ? loadErrorDialog = LoadErrorDialog(filepath) result = loadErrorDialog.exec_() if result == 1: # absolute filepath = loadErrorDialog.lineEditImagePath.text() # to relative if needed self.filepath = utils.toRelativeToQGS(filepath) self.setCustomProperty("filepath", self.filepath) QgsProject.instance().setDirty(True) else: self.error = True del loadErrorDialog fileInfo = QFileInfo(filepath) ext = fileInfo.suffix() if ext == "pdf": s = QSettings() oldValidation = s.value("/Projections/defaultBehavior") s.setValue("/Projections/defaultBehavior", "useGlobal") # for not asking about crs path = fileInfo.filePath() baseName = fileInfo.baseName() layer = QgsRasterLayer(path, baseName) self.image = layer.previewAsImage(QSize(layer.width(),layer.height())) s.setValue("/Projections/defaultBehavior", oldValidation) else: reader = QImageReader(filepath) self.image = reader.read() self.initialized = True self.initializing = False self.setupCrs() if screenExtent: # constructor called from AddLayer action # if not, layer loaded from QGS project file # check if image already has georef info # use GDAL dataset = gdal.Open(filepath, gdal.GA_ReadOnly) georef = None if dataset: georef = dataset.GetGeoTransform() if georef and not self.is_default_geotransform(georef): self.initializeExistingGeoreferencing(dataset, georef) else: # init to default params self.setCenter(screenExtent.center()) self.setRotation(0.0) sw = screenExtent.width() sh = screenExtent.height() self.resetScale(sw, sh) self.commitTransformParameters()