def Input(filenames): """ Take list of masks or filenames, return list of absolute filepaths, or False if error. """ METHOD_NAME = f"Blister.Input" if type(filenames) != type(list()): print(f"{METHOD_NAME}: Invalid input type {type(filenames)}. List of strings only.", end='\n') return False file_list = [] fileinfo_list = [] fileinfo_unreadable = [] for filename in filenames: if type(filename) != type(str()): print(f"{METHOD_NAME}: Invalid input type {type(filename)} in list. Strings only.", end='\n') return False file_list += glob.glob(QFileInfo(filename).absoluteFilePath()) file_list = list(set(file_list)) file_list.sort() for _file in file_list: fileinfo = QFileInfo(_file) if fileinfo.isFile(): if fileinfo.isReadable(): fileinfo_list += [fileinfo.absoluteFilePath()] else: fileinfo_unreadable += [fileinfo.absoluteFilePath()] if fileinfo_unreadable: print(f"{METHOD_NAME}: List of unreadable files (will not be processed):", end='\n') for fileinfo in fileinfo_unreadable: print(f"\t{fileinfo}", end='\n') if not fileinfo_list: print(f"{METHOD_NAME}: No input files exist or reachable.", end='\n') return False print(f"{METHOD_NAME}: List of input files:", end='\n') for fileinfo in fileinfo_list: print(f"\t{fileinfo}", end='\n') return fileinfo_list
def __installEric6Doc(self, engine): """ Private method to install/update the eric6 help documentation. @param engine reference to the help engine (QHelpEngineCore) @return flag indicating success (boolean) """ versionKey = "eric6_ide" info = engine.customValue(versionKey, "") lst = info.split('|') dt = QDateTime() if len(lst) and lst[0]: dt = QDateTime.fromString(lst[0], Qt.ISODate) qchFile = "" if len(lst) == 2: qchFile = lst[1] docsPath = QDir(getConfig("ericDocDir") + QDir.separator() + "Help") files = docsPath.entryList(["*.qch"]) if not files: engine.setCustomValue( versionKey, QDateTime().toString(Qt.ISODate) + '|') return False for f in files: if f == "source.qch": fi = QFileInfo(docsPath.absolutePath() + QDir.separator() + f) if dt.isValid() and \ fi.lastModified().toString(Qt.ISODate) == \ dt.toString(Qt.ISODate) and \ qchFile == fi.absoluteFilePath(): return False namespace = QHelpEngineCore.namespaceName( fi.absoluteFilePath()) if not namespace: continue if namespace in engine.registeredDocumentations(): engine.unregisterDocumentation(namespace) if not engine.registerDocumentation(fi.absoluteFilePath()): self.errorMessage.emit( self.tr( """<p>The file <b>{0}</b> could not be""" """ registered. <br/>Reason: {1}</p>""") .format(fi.absoluteFilePath, engine.error()) ) return False engine.setCustomValue( versionKey, fi.lastModified().toString(Qt.ISODate) + '|' + fi.absoluteFilePath()) return True return False
def __installEric6Doc(self, engine): """ Private method to install/update the eric6 help documentation. @param engine reference to the help engine (QHelpEngineCore) @return flag indicating success (boolean) """ versionKey = "eric6_ide" info = engine.customValue(versionKey, "") lst = info.split('|') dt = QDateTime() if len(lst) and lst[0]: dt = QDateTime.fromString(lst[0], Qt.ISODate) qchFile = "" if len(lst) == 2: qchFile = lst[1] docsPath = QDir(getConfig("ericDocDir") + QDir.separator() + "Help") files = docsPath.entryList(["*.qch"]) if not files: engine.setCustomValue(versionKey, QDateTime().toString(Qt.ISODate) + '|') return False for f in files: if f == "source.qch": fi = QFileInfo(docsPath.absolutePath() + QDir.separator() + f) namespace = QHelpEngineCore.namespaceName( fi.absoluteFilePath()) if not namespace: continue if (dt.isValid() and namespace in engine.registeredDocumentations() and (fi.lastModified().toString(Qt.ISODate) == dt.toString(Qt.ISODate)) and qchFile == fi.absoluteFilePath()): return False if namespace in engine.registeredDocumentations(): engine.unregisterDocumentation(namespace) if not engine.registerDocumentation(fi.absoluteFilePath()): self.errorMessage.emit( self.tr( """<p>The file <b>{0}</b> could not be""" """ registered. <br/>Reason: {1}</p>""").format( fi.absoluteFilePath, engine.error())) return False engine.setCustomValue( versionKey, fi.lastModified().toString(Qt.ISODate) + '|' + fi.absoluteFilePath()) return True return False
class QuarkNotebookModel: """Subdirectories located in the Quark notes directory (defined by its path in 'config.json' under "notes_dir") are represented by this class in the Quark note manager.""" def __init__(self, dirPath): """Initialize data for the model.""" self._notebookDir = QFileInfo(dirPath) #store path to the notebook as a 'QFileInfo' for added flexibility q = QFileIconProvider() #objec used to create model display icon self._icon = q.icon(self._notebookDir) #create model display icon self._notes = [] #initialize empty list of notes notebookPath = self._notebookDir.absoluteFilePath() #get the absolute path to the notebook #load all the notes inside this notebook for item in sorted(os.listdir(notebookPath)): #for every item in the notebook itemPath = os.path.join(notebookPath, item) #get absolute path to the item if os.path.isfile(itemPath): #if the item is a file/note self._notes.append( QuarkNoteModel(itemPath, self) ) #append a new note to the notes list def noteAt(self, i): """Returns the note at a given index.""" if i >= 0 and i < len(self._notes): return self._notes[i] else: return None def noteCount(self): """Returns the number notes inside this notebook.""" return len(self._notes) def getName(self): """Returns the name of this notebook/directory.""" return self._notebookDir.fileName() def getFilePath(self): """Returns path to the note.""" return self._notebookDir.absoluteFilePath() def getIcon(self): """Returns the icon to be displayed in the Quark note manager.""" return self._icon
class MainWindow(QMainWindow): """ drag and drop image viewer """ def __init__(self): super(MainWindow, self).__init__() self.ui = Ui_MainWindow() self.ui.setupUi(self) # set up variables self.pixmap = QPixmap() self.f = QFileInfo() self.setAcceptDrops(True) # --------------------------------------- # Drag / Drop code # --------------------------------------- def dragEnterEvent(self, event): acceptedFileTypes = [] acceptedFileTypes.append("jpg") acceptedFileTypes.append("png") acceptedFileTypes.append("bmp") print(acceptedFileTypes) if (event.mimeData().hasUrls())and \ (len(event.mimeData().urls()) == 1): self.f = QFileInfo(event.mimeData().urls()[0].toLocalFile()) print(self.f.suffix().lower()) if self.f.suffix().lower() in acceptedFileTypes: event.acceptProposedAction() def dropEvent(self, event): print('Drop Event happening') print(self.f.absoluteFilePath()) if (self.pixmap.load(self.f.absoluteFilePath())): self.ui.label.setPixmap( self.pixmap.scaled(self.ui.label.size(), Qt.KeepAspectRatio, Qt.SmoothTransformation)) else: QMessageBox.critical(self, "Error", "The image file cannot be read!") def resizeEvent(self, event): if not (self.pixmap.isNull()): self.ui.label.setPixmap( self.pixmap.scaled(self.ui.label.width() - 5, self.ui.label.height() - 5, Qt.KeepAspectRatio, Qt.SmoothTransformation))
def openFile(self): """ Public slot to open the downloaded file. """ info = QFileInfo(self.__fileName) url = QUrl.fromLocalFile(info.absoluteFilePath()) QDesktopServices.openUrl(url)
def __open(self): """ Private slot to open the downloaded file. """ info = QFileInfo(self.__output) url = QUrl.fromLocalFile(info.absoluteFilePath()) QDesktopServices.openUrl(url)
def Seal(dir_path): """ Seal a folder: count recursively MD5 checksum, write it to all.md5, then make the folder read-only. Shell function, need package md5deep. """ METHOD_NAME = f"Blister.Seal" qdir = QDir(dir_path) if not qdir.exists(): print(f"{METHOD_NAME}: Path doesn't exist or isn't a dir.", end='\n') return False qfiles = QFileInfo(qdir, "**/*") file_list = glob.glob(qfiles.absoluteFilePath(), recursive=True) for _file in file_list: fileinfo = QFileInfo(_file) if not fileinfo.isReadable(): print(f"{METHOD_NAME}: There is input cannot be checked (unreadable files). Stopped.", end='\n') return False start_time = time.time() sp = subprocess.Popen(f"cd {qdir.absolutePath()}; (md5deep -lr * > all.md5); chmod 555 -R {qdir.absolutePath()}", shell=True, stderr=subprocess.PIPE) out, err = sp.communicate() if err != b'': print(f"{METHOD_NAME}: Shell error: {str(err)}", end='\n') return False print(f"{METHOD_NAME}: Dir was sealed [%s]:\n\t{qdir.absolutePath()}" % (Blister.SecToTime(time.time() - start_time)), end='\n') return True
def saveTextdata(self, filePath, data): outFile = QFileInfo(filePath) fileName = outFile.fileName() if QFile.exists(fileName): QFile.remove(fileName) outFile = QFile(outFile.absoluteFilePath()) outFile.open(QIODevice.WriteOnly | QIODevice.Text) if outFile.error() != outFile.NoError: self.msgBox.information( QDialog().move(self.fly), "{}".format(fileName), self.translate("openV2rayJSONFile", "Unable to open the file {}: {}.").format( fileName, outFile.errorString())) outFile = None return False outFile.write(codecs.encode(data, "utf-8")) if outFile.error() != outFile.NoError: self.msgBox.information( QDialog().move(self.fly), "{}".format(fileName), self.translate("openV2rayJSONFile", "Unable to save the file {}: {}.").format( fileName, outFile.errorString())) outFile = None return False outFile.close()
def open(self, file_name): """Open the file at the given path for reading. Args: file_name (str): File path of the file to open. Only .wav files permitted. Raises: FileNotFoundError: If the filename given cannot be opened. """ if file_name is not None: file_info = QFileInfo(file_name) if file_info.exists(): self.file_name = file_name # Update the waveform data wave_read = wave.open(file_name, 'r') self.waveform_info = wave_read.getparams() step = int(self.waveform_info.framerate / self.stored_fps) self.waveform_data = list(bytesToInts( data=wave_read.readframes(-1), channelWidth=self.waveform_info.sampwidth, numChannels=self.waveform_info.nchannels, signed=True, step=step)) # Update the media player url = QUrl.fromLocalFile(file_info.absoluteFilePath()) self.media_player.setMedia(QMediaContent(url)) # Send out appropriate event self.signalFileChanged.emit() wave_read.close() else: raise FileNotFoundError('No file exists at given file path')
def mouseDoubleClickEvent(self, event): index = self.selectedIndexes()[0] finfo = QFileInfo(self._model.filePath(index)) if finfo.isDir(): self.baseDir = finfo.absoluteFilePath() self.PathChangedEvent(self.baseDir) self.pathChanged.emit(self.baseDir)
def addImages(self): imageFileNames = QFileDialog.getOpenFileNames( caption="Select image files to label") if not imageFileNames[0] or len(imageFileNames[0]) == 0: return imageFileNames = imageFileNames[0] labelsDir = QFileInfo(self.labelsFileName).absoluteDir() originDir = QFileInfo(imageFileNames[0]).absoluteDir() #Copy image files to the labels folder if originDir.absolutePath() != labelsDir.absolutePath(): progDialog = QProgressDialog( "Copying image files to the labels folder", "Cancel", 0, len(imageFileNames), self) i = 0 for imageFileName in imageFileNames: progDialog.setValue(i) oldName = QFileInfo(imageFileName).fileName() newPath = labelsDir.absoluteFilePath(oldName) print("Copying {} to {}".format(imageFileName, newPath)) ok = QFile.copy(imageFileName, newPath) QApplication.processEvents() if not ok: print("Error copying {} to {}".format(imageFileName, newPath)) i += 1 progDialog.setValue(len(imageFileNames)) progDialog.close() currentImageFileNames = [s.fileName for s in self.labeledImages] newImgIdx = len(self.labeledImages) for imageFileName in imageFileNames: normalizedFileName = QFileInfo(imageFileName).fileName() if normalizedFileName in currentImageFileNames: print("File {} already in dataset, skipping".format( normalizedFileName)) continue self.labeledImages.append(LabeledImage(normalizedFileName, [])) self.fileListModel.setStringList( [s.fileName for s in self.labeledImages]) self.loadImageAtIndex(newImgIdx) print("Added {} images to dataset".format(len(imageFileNames))) print("New length of labeledImages array {}".format( len(self.labeledImages)))
def unzipdownloadFile(self, downladFile, latestVersion): import zipfile fileInfo = None self.newV2rayPath = None if QFile.exists(downladFile): fileInfo = QFileInfo(QFile(downladFile)) else: return False def checkFilesize(file): v2rayFile = QFile(file.absoluteFilePath()) # check file size need open the file v2rayFile.open(QIODevice.ReadOnly | QIODevice.Text) if v2rayFile.error() == v2rayFile.NoError: if v2rayFile.size() > 600000: v2rayFile.close() return True else: v2rayFile.close() return False if (fileInfo): with zipfile.ZipFile(fileInfo.absoluteFilePath(), "r") as zip_ref: for i in zip_ref.namelist(): absoluteFilePath = fileInfo.absolutePath( ) + QDir.separator() + i if re.search("/v2ray.exe$", absoluteFilePath): # ## windows self.newV2rayPath = None self.newV2rayPath = QFileInfo(QFile(absoluteFilePath)) if self.newV2rayPath and checkFilesize( self.newV2rayPath): break if re.search("/v2ray$", absoluteFilePath): # ## other self.newV2rayPath = None self.newV2rayPath = QFileInfo(QFile(absoluteFilePath)) if self.newV2rayPath and checkFilesize( self.newV2rayPath): break try: zip_ref.extractall(fileInfo.absolutePath()) except PermissionError: return if sys.platform.startswith('win'): pass else: os.chmod(self.newV2rayPath.absoluteFilePath(), 0o755) os.chmod( self.newV2rayPath.absoluteFilePath()[:-5] + "v2ctl", 0o755) if self.newV2rayPath: if (self.stopV2ray): self.stopV2ray.emit() self.bridgetreasureChest.setV2raycoreFilePath( self.newV2rayPath.absoluteFilePath()) self.bridgetreasureChest.setV2raycoreVersion(latestVersion) self.bridgetreasureChest.save.emit() if (self.startV2ray): self.startV2ray.emit() return True else: return False
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 ClickedEvent(self, event): validSuffix = ['jpg', 'png'] index = self.selectedIndexes()[0] finfo = QFileInfo(self._model.filePath(index)) if finfo.suffix().lower() not in validSuffix: return if finfo.isFile() and finfo.isReadable(): self.fileSelected.emit(finfo.absoluteFilePath())
def dropEvent(self, event): event.ignore() return if event.source(): QTreeView.dropEvent(self, event) else: ix = self.indexAt(event.pos()) if not self.model().isDir(ix): ix = ix.parent() pathDir = self.model().filePath(ix) if not pathDir: pathDir = self.model().filePath(self.rootIndex()) m = event.mimeData() if m.hasUrls(): urlLocals = [url for url in m.urls() if url.isLocalFile()] accepted = False for urlLocal in urlLocals: path = urlLocal.toLocalFile() info = QFileInfo(path) n_path = QDir(pathDir).filePath(info.fileName()) o_path = info.absoluteFilePath() if n_path == o_path: continue if info.isDir(): if QDir(n_path).exists(): reply = QMessageBox.question( self, '提示', '所选的分组中存在同名文件夹,是否全部覆盖?', QMessageBox.Yes | QMessageBox.No) if reply == QMessageBox.Yes: shutil.rmtree(n_path) shutil.copytree(o_path, n_path) else: print(o_path) for file in os.walk(o_path): print(file) shutil.copytree(o_path, n_path) self.strategy_filters.append( os.path.split(n_path)[1]) self._model.setNameFilters(self.strategy_filters) else: qfile = QFile(o_path) fname = qfile.fileName() if not fname.endswith('.py'): QMessageBox.warning(self, "提示", "暂不支持该类型文件", QMessageBox.Yes) if QFile(n_path).exists(): reply = QMessageBox.question( self, '提示', '所选的分组中存在同名文件,是否覆盖?', QMessageBox.Yes | QMessageBox.No) if reply == QMessageBox.Yes: shutil.copy(o_path, n_path) # qfile.rename(n_path) accepted = True if accepted: event.acceptProposedAction()
def add_song(self, song_path): if song_path.split(".")[-1] not in ["mp3", "flac", "ogg"]: raise AssertionError song = self.path_to_song(song_path) filepath = song.path fileInfo = QFileInfo(filepath) if fileInfo.exists(): url = QUrl.fromLocalFile(fileInfo.absoluteFilePath()) if fileInfo.suffix().lower() == "mp3" or "flac" or "ogg": self.playlist.addMedia(QMediaContent(url)) self.songs.append(song)
def path_with_tilde_homepath(path): if IS_WINDOWS: return path home_path = QDir.homePath() fi = QFileInfo(QDir.cleanPath(path)) outpath = fi.absoluteFilePath() if outpath.startswith(home_path): outpath = "~" + outpath[len(home_path):] else: outpath = path return outpath
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 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])
class MainWindow(QMainWindow): """ drag and drop graphics viewer """ def __init__(self): super(MainWindow, self).__init__() self.ui = Ui_mainWindow() self.ui.setupUi(self) self.setAcceptDrops(True) # set up variables self.f = QFileInfo() self.scene = QGraphicsScene() self.ui.graphicsView.setAcceptDrops(False) self.ui.graphicsView.setScene(self.scene) self.ui.graphicsView.setInteractive(True) self.ui.graphicsView.setDragMode(QGraphicsView.RubberBandDrag) self.ui.graphicsView.setRubberBandSelectionMode(Qt.ContainsItemShape) # -------------------------------- # Drag / Drop code # -------------------------------- def dragEnterEvent(self, event): acceptedFileTypes = [] acceptedFileTypes.append("jpg") acceptedFileTypes.append("png") acceptedFileTypes.append("bmp") print(acceptedFileTypes) if (event.mimeData().hasUrls()) and \ (len(event.mimeData().urls()) == 1): self.f = QFileInfo(event.mimeData().urls()[0].toLocalFile()) print(self.f.suffix().lower()) if self.f.suffix().lower() in acceptedFileTypes: event.acceptProposedAction() def dropEvent(self, event): print('Drop Event happened') # print(f.absoluteFilePath()) file = QFileInfo(event.mimeData().urls()[0].toLocalFile()) pixmap = QPixmap() if pixmap.load(self.f.absoluteFilePath()): item = QGraphicsPixmapItem(pixmap) self.scene.addItem(item) else: QMessageBox.critical(self, 'Error', 'The image file cannot be read!') print(self.scene.items().count(item)) print(self.scene.items().count(item)) print(self.scene.items().count(item)) print(self.scene)
def addToPlaylist(self, fileNames): for name in fileNames: fileInfo = QFileInfo(name) if fileInfo.exists(): url = QUrl.fromLocalFile(fileInfo.absoluteFilePath()) if fileInfo.suffix().lower() == 'm3u': self.playlist.load(url) else: self.playlist.addMedia(QMediaContent(url)) else: url = QUrl(name) if url.isValid(): self.playlist.addMedia(QMediaContent(url))
def _load_audio(self): filename = os.path.join(self.audio_path, "{:03}.mp3".format(self._song_number)) self.playlist.clear() fileInfo = QFileInfo(filename) if fileInfo.exists(): url = QUrl.fromLocalFile(fileInfo.absoluteFilePath()) if fileInfo.suffix().lower() == 'm3u': self.playlist.load(url) else: self.playlist.addMedia(QMediaContent(url)) self._loading_audio = True self.player.play()
def openOnStart(self, name): fileInfo = QFileInfo(name) if fileInfo.exists(): url = QUrl.fromLocalFile(fileInfo.absoluteFilePath()) if fileInfo.suffix().lower() == 'm3u': self.playlist.load(url) else: self.playlist.addMedia(QMediaContent(url)) else: url = QUrl(name) if url.isValid(): self.playlist.addMedia(QMediaContent(url)) print("added Files to playlist")
def ImageSelectedEvent(self, path): def HumanSize(size, decimal_places): for unit in ['', 'KB', 'MB', 'GB', 'TB']: if size < 1024.0: break size /= 1024.0 return f"{size:.{decimal_places}f} {unit}" finfo = QFileInfo(path) self.imagePathBox.setText(finfo.absoluteFilePath()) self.imageFileSizeBox.setText(HumanSize(finfo.size(), 3)) date = finfo.lastModified().toString('yyyy-dd-MM hh:mm:ss') self.imageModifyTimeBox.setText(date) self.currentSelectPic = finfo
def __init__(self, el, parent=None): super(MenuContentItem, self).__init__(parent) self.name = el.getAttribute('name') self.heading = None self.description1 = None self.description2 = None readme_dir = QFileInfo(__file__).dir() readme_dir.cdUp() readme_dir.cd(el.getAttribute('dirname')) self.readmePath = readme_dir.absoluteFilePath('README') self._prepared = False
def get_path_datasize(path): file_info = QFileInfo(path) data_size = 0 if file_info.isDir(): data_size, files_count = get_directory_size( file_info.absoluteFilePath()) # logger.info("path (folder) %s %u elements size now=%u (%s)", # file_info.absoluteFilePath(), files_count, data_size, pretty_bytes(data_size)) else: # logger.info("path (file) %s size=%u", file_info.path(), file_info.size()) data_size = file_info.size() files_count = 1 return data_size, files_count
def __init__(self, el, parent=None): super(MenuContentItem, self).__init__(parent) self.name = el.getAttribute("name") self.heading = None self.description1 = None self.description2 = None readme_dir = QFileInfo(__file__).dir() readme_dir.cdUp() readme_dir.cd(el.getAttribute("dirname")) self.readmePath = readme_dir.absoluteFilePath("README") self._prepared = False
def Dir(dir_path, create=True): """ Take dir path, return absolute path, or False if error. Create new folder by default. """ METHOD_NAME = f"Blister.Dir" if type(dir_path) != type(str()): print(f"{METHOD_NAME}: Invalid input type {type(dir_path)}. String only.", end='\n') return False dir_info = QFileInfo(dir_path) if (dir_info.exists() and (not dir_info.permission(QFile.WriteUser))): print(f"{METHOD_NAME}: Writing in this dir is not permitted:\n\t{dir_info.absoluteFilePath()}", end='\n') return False if ((not dir_info.exists()) and (not create)): print(f"{METHOD_NAME}: This dir does not exist [creating new is forbidden]:\n\t{dir_info.absoluteFilePath()}", end='\n') return False if ((not dir_info.exists()) and create): result = QDir.mkpath(QDir(), dir_info.absoluteFilePath()) if not result: print(f"{METHOD_NAME}: Creating new dir was failed:\n\t{dir_info.absoluteFilePath()}", end='\n') return False else: print(f"{METHOD_NAME}: New dir was created:\n\t{dir_info.absoluteFilePath()}", end='\n') return dir_info.absoluteFilePath()
def browseOpenwith(self): filename, selectedFilter = QFileDialog.getOpenFileName(self, self.windowTitle()) if not filename: return fi = QFileInfo(filename) if fi.isSymLink(): filename = fi.symLinkTarget() if not os.path.exists(filename): QMessageBox.information(self, self.windowTitle(), self.tr("快捷方式所指向的程序不正确。")) return fi = QFileInfo(filename) if not fi.isExecutable(): QMessageBox.information(self, self.windowTitle(), self.tr("编辑程序必须是一个可执行文件。请重新选择。该选项是选填项,并不一定要填写。")) self.txtOpenwith.setText(fi.absoluteFilePath())
def on_double_clicked(self, index): """ event handler: 双击工作空间中文件的handler Parameters ---------- index : 双击的item在tree_widget中的索引 """ # 取得双击的文件路径 file_info = QFileInfo(self.tree_view.model().fileInfo(index)) # 告诉线程文件路径,并启动线程 if file_info.isFile(): self.file_path = file_info.absoluteFilePath() self.worker_calc_overall.file_path = self.file_path self.thread_calc_overall.start()
def browseOpenwith(self): filename, selectedFilter = QFileDialog.getOpenFileName( self, self.windowTitle()) if not filename: return fi = QFileInfo(filename) if fi.isSymLink(): filename = fi.symLinkTarget() if not os.path.exists(filename): QMessageBox.information(self, self.windowTitle(), self.tr("快捷方式所指向的程序不正确。")) return fi = QFileInfo(filename) if not fi.isExecutable(): QMessageBox.information( self, self.windowTitle(), self.tr("编辑程序必须是一个可执行文件。请重新选择。该选项是选填项,并不一定要填写。")) self.txtOpenwith.setText(fi.absoluteFilePath())
def on_main_window_start(main_window): main_window.theme_menu = main_window.menuBar().addMenu( main_window.tr('Themes')) themes_directory = QFileInfo('themes') if themes_directory.exists(): active_theme = ThemeManager.get_active_theme() path = themes_directory.absoluteFilePath() group_action = QActionGroup(main_window) group_action.setExclusive(True) for theme in os.listdir(path): action = QAction(theme, main_window) action.setData(theme) action.setCheckable(True) if theme == active_theme: action.setChecked(True) action.changed.connect(ThemeManager.wrapper(main_window)) group_action.addAction(action) group_action.addAction(action) main_window.theme_menu.addAction(action)
class QuarkNoteModel: """Files located in the Quark notes directory (defined by its path in 'config.json' under "notes_dir") are represented by this class in the Quark note manager.""" def __init__(self, fileInfo, _parent = None): """Initializes data for the model.""" self._noteFile = QFileInfo(fileInfo) q = QFileIconProvider() self._icon = q.icon(self._noteFile) self._parent = _parent def getIcon(self): """Returns the icon to be displayed in the Quark note manager.""" return self._icon def getName(self): """Returns the file name of the note.""" return self._noteFile.fileName() def getFilePath(self): """Returns path to the note.""" return self._noteFile.absoluteFilePath() def getParent(self): """Returns the parent notebook.""" return self._parent def setNewParent(self, newParent): """Set a new parent for the note.""" self._parent = newParent
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 choose_mountpoint(self): while True: path = QFileDialog.getExistingDirectory( self, QCoreApplication.translate("GlobalSettingsWidget", "Choose a mountpoint"), str(pathlib.Path.home()), ) if not path: return path_info = QFileInfo(path) if not path_info.isDir() or not path_info.isWritable(): show_error( self, QCoreApplication.translate( "GlobalSettingsWidget", "The choosen folder is not writable."), ) else: self.line_edit_mountpoint.setText(path_info.absoluteFilePath()) return
def slot_file_content_view_clicked(self, file_info: QFileInfo, message_number: int): # get grib message from file file_info = self.file_content_model.file_info grib_file = nuwe_pyeccodes.GribFileHandler() grib_file.openFile(file_info.absoluteFilePath()) grib_message = None for i in range(0, message_number): grib_message = grib_file.next() if grib_message is None: print("ERROR when loading message: ", message_number) return # plot message grid_data = GribPlotter.generate_plot_data(grib_message) plot_scene = PlotScene() layer = ContourLayer('contour layer', 'contour.1') layer.grid_data = grid_data plot_scene.append_layer(layer) self.plot_widget.clear_scene() self.plot_widget.set_plot_scene(plot_scene)
def addToPlaylist(self, fileNames): for name in fileNames: fileInfo = QFileInfo(name) if fileInfo.exists(): url = QUrl.fromLocalFile(fileInfo.absoluteFilePath()) if fileInfo.suffix().lower() == 'm3u': self.playlist.load(url) else: self.playlist.addMedia(QMediaContent(url)) else: url = QUrl(name) if url.isValid(): self.playlist.addMedia(QMediaContent(url)) try: segment_file_path = SEGMENT_DIR + name.replace('.mp4', '.json') json_dict = self.open_json(segment_file_path) self.clear_input_boxes() self.segmentList.clear() for segment in json_dict["segments"]: item = TreeWidgetItem(self.segmentList) ''' item.setText(0, segment['product']) item.setText(1, str(segment['start'])) item.setText(2, segment['label']) item.setText(3, segment['tool']) item.setText(4, segment['behavior']) ''' item.setText(0, segment['start_segment']) item.setText(1, segment['end_segment']) item.setText(2, segment['label']) item.setText(3, segment['event']) item.setFlags(item.flags() | Qt.ItemIsEditable) self.segmentList.addTopLevelItem(item) except: pass
def main(): # Initialise. defaultContext = "@default" fetchedTor = MetaTranslator() codecForTr = '' codecForSource = '' tsFileNames = [] uiFileNames = [] verbose = False noObsolete = False metSomething = False numFiles = 0 standardSyntax = True metTsFlag = False tr_func = None translate_func = None # Parse the command line. for arg in sys.argv[1:]: if arg == "-ts": standardSyntax = False argc = len(sys.argv) i = 1 while i < argc: arg = sys.argv[i] i += 1 if arg == "-help": printUsage() sys.exit(0) if arg == "-version": sys.stderr.write("pylupdate5 v%s\n" % PYQT_VERSION_STR) sys.exit(0) if arg == "-noobsolete": noObsolete = True continue if arg == "-verbose": verbose = True continue if arg == "-ts": metTsFlag = True continue if arg == "-tr-function": if i >= argc: sys.stderr.write( "pylupdate5 error: missing -tr-function name\n") sys.exit(2) tr_func = sys.argv[i] i += 1 continue if arg == "-translate-function": if i >= argc: sys.stderr.write( "pylupdate5 error: missing -translate-function name\n") sys.exit(2) translate_func = sys.argv[i] i += 1 continue numFiles += 1 fullText = "" if not metTsFlag: f = QFile(arg) if not f.open(QIODevice.ReadOnly): sys.stderr.write( "pylupdate5 error: Cannot open file '%s'\n" % arg) sys.exit(1) t = QTextStream(f) fullText = t.readAll() f.close() if standardSyntax: oldDir = QDir.currentPath() QDir.setCurrent(QFileInfo(arg).path()) fetchedTor = MetaTranslator() codecForTr = '' codecForSource = '' tsFileNames = [] uiFileNames = [] for key, value in proFileTagMap(fullText).items(): for t in value.split(' '): if key == "SOURCES": fetchtr_py(QDir.current().absoluteFilePath(t), fetchedTor, defaultContext, True, codecForSource, tr_func, translate_func) metSomething = True elif key == "TRANSLATIONS": tsFileNames.append(QDir.current().absoluteFilePath(t)) metSomething = True elif key in ("CODEC", "DEFAULTCODEC", "CODECFORTR"): codecForTr = t fetchedTor.setCodec(codecForTr) elif key == "CODECFORSRC": codecForSource = t elif key == "FORMS": fetchtr_ui(QDir.current().absoluteFilePath(t), fetchedTor, defaultContext, True) updateTsFiles(fetchedTor, tsFileNames, codecForTr, noObsolete, verbose) if not metSomething: sys.stderr.write( "pylupdate5 warning: File '%s' does not look like a " "project file\n" % arg) elif len(tsFileNames) == 0: sys.stderr.write( "pylupdate5 warning: Met no 'TRANSLATIONS' entry in " "project file '%s'\n" % arg) QDir.setCurrent(oldDir) else: if metTsFlag: if arg.lower().endswith(".ts"): fi = QFileInfo(arg) if not fi.exists() or fi.isWritable(): tsFileNames.append(arg) else: sys.stderr.write( "pylupdate5 warning: For some reason, I " "cannot save '%s'\n" % arg) else: sys.stderr.write( "pylupdate5 error: File '%s' lacks .ts extension\n" % arg) else: fi = QFileInfo(arg) if fi.suffix() in ("py", "pyw"): fetchtr_py(fi.absoluteFilePath(), fetchedTor, defaultContext, True, codecForSource, tr_func, translate_func) else: fetchtr_ui(fi.absoluteFilePath(), fetchedTor, defaultContext, True) if not standardSyntax: updateTsFiles(fetchedTor, tsFileNames, codecForTr, noObsolete, verbose) if numFiles == 0: printUsage() sys.exit(1)
def on_btnInfo_absFilePath_clicked(self): self.__showBtnInfo(self.sender()) fileInfo = QFileInfo(self.ui.editFile.text()) text = fileInfo.absoluteFilePath() self.ui.textEdit.appendPlainText(text + "\n")
def __installQtDoc(self, name, version, engine): """ Private method to install/update a Qt help document. @param name name of the Qt help document (string) @param version Qt version of the help documens (integer) @param engine reference to the help engine (QHelpEngineCore) @return flag indicating success (boolean) """ versionKey = "qt_version_{0}@@{1}".format(version, name) info = engine.customValue(versionKey, "") lst = info.split("|") dt = QDateTime() if len(lst) and lst[0]: dt = QDateTime.fromString(lst[0], Qt.ISODate) qchFile = "" if len(lst) == 2: qchFile = lst[1] if version == 4: docsPath = QDir(QLibraryInfo.location(QLibraryInfo.DocumentationPath) + QDir.separator() + "qch") elif version == 5: docsPath = QDir(QLibraryInfo.location(QLibraryInfo.DocumentationPath)) else: # unsupported Qt version return False files = docsPath.entryList(["*.qch"]) if not files: engine.setCustomValue(versionKey, QDateTime().toString(Qt.ISODate) + "|") return False for f in files: if f.startswith(name): fi = QFileInfo(docsPath.absolutePath() + QDir.separator() + f) namespace = QHelpEngineCore.namespaceName(fi.absoluteFilePath()) if not namespace: continue if ( dt.isValid() and namespace in engine.registeredDocumentations() and fi.lastModified().toString(Qt.ISODate) == dt.toString(Qt.ISODate) and qchFile == fi.absoluteFilePath() ): return False if namespace in engine.registeredDocumentations(): engine.unregisterDocumentation(namespace) if not engine.registerDocumentation(fi.absoluteFilePath()): self.errorMessage.emit( self.tr( """<p>The file <b>{0}</b> could not be""" """ registered. <br/>Reason: {1}</p>""" ).format(fi.absoluteFilePath, engine.error()) ) return False engine.setCustomValue(versionKey, fi.lastModified().toString(Qt.ISODate) + "|" + fi.absoluteFilePath()) return True return False
def open(self): fileName = QFileDialog.getOpenFileName(self, "Open File")[0] fileInfo = QFileInfo(fileName) if fileInfo.exists(): url = QUrl.fromLocalFile(fileInfo.absoluteFilePath()) self.changeMedia(QMediaContent(url))