예제 #1
0
	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
예제 #2
0
 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
예제 #3
0
    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
예제 #5
0
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))
예제 #6
0
 def openFile(self):
     """
     Public slot to open the downloaded file.
     """
     info = QFileInfo(self.__fileName)
     url = QUrl.fromLocalFile(info.absoluteFilePath())
     QDesktopServices.openUrl(url)
예제 #7
0
 def __open(self):
     """
     Private slot to open the downloaded file.
     """
     info = QFileInfo(self.__output)
     url = QUrl.fromLocalFile(info.absoluteFilePath())
     QDesktopServices.openUrl(url)
예제 #8
0
	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
예제 #9
0
 def __open(self):
     """
     Private slot to open the downloaded file.
     """
     info = QFileInfo(self.__output)
     url = QUrl.fromLocalFile(info.absoluteFilePath())
     QDesktopServices.openUrl(url)
예제 #10
0
    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()
예제 #11
0
 def openFile(self):
     """
     Public slot to open the downloaded file.
     """
     info = QFileInfo(self.__fileName)
     url = QUrl.fromLocalFile(info.absoluteFilePath())
     QDesktopServices.openUrl(url)
예제 #12
0
    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')
예제 #13
0
 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)
예제 #14
0
    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)))
예제 #15
0
    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
예제 #16
0
 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
예제 #17
0
    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())
예제 #18
0
 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()
예제 #19
0
 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)
예제 #20
0
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
예제 #21
0
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
예제 #22
0
 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
예제 #23
0
    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)
예제 #25
0
 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))
예제 #26
0
파일: player.py 프로젝트: heylenz/python27
 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))
예제 #27
0
    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()
예제 #28
0
 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")
예제 #29
0
    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
예제 #31
0
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
예제 #32
0
    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
예제 #33
0
	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()
예제 #34
0
 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())
예제 #35
0
파일: main.py 프로젝트: WeetCheng/HRUI
    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()
예제 #36
0
 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())
예제 #37
0
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)
예제 #38
0
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
예제 #40
0
	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()
예제 #41
0
 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
예제 #42
0
    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)
예제 #43
0
    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
예제 #44
0
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)
예제 #45
0
 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")
예제 #46
0
    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
예제 #47
0
 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))