#!/usr/bin/python3 # -*- coding: utf-8 -*- # toujours ce putain de core dumped avec les fenetres annextes ############################### ### Importation des modules ### ############################### """ from PyQt5.QtGui import * from PyQt5.QtWidgets import * from PyQt5.QtCore import * """ from PyQt5 import QtCore, QtGui, QtWidgets import sys from pathlib import Path # Nécessaire pour la recherche de fichier from psutil import cpu_count # Indique le nombre de cpu from ui_Qtesseract import Ui_Qtesseract # Utilisé pour la fenêtre principale ########################## ### Variables globales ### ########################## GlobalVar = {"TesseractLanguages": [], "Close": 1} ############################################################################# class Qtesseract(QtWidgets.QMainWindow): def __init__(self, parent=None): """Fonction d'initialisation appelée au lancement de la classe.""" ### Commandes à ne pas toucher super(Qtesseract, self).__init__(parent) self.ui = Ui_Qtesseract() self.ui.setupUi(self) # Lance la fonction définissant tous les widgets du fichier UI ################# ### Variables ### ################# ### Création d'un dossier temporaire while True: self.FolderTempWidget = QtCore.QTemporaryDir() if self.FolderTempWidget.isValid(): self.FolderTemp = Path(self.FolderTempWidget.path()) # Dossier temporaire break ### Initialisation de variables self.SubImgFiles = [] # Liste des fichiers sous titres image self.MD5Dico = {} ## Variables actuelles self.IDX = Path(GlobalVar["input"]) self.SUB = Path(self.IDX).with_suffix(".sub") self.SRT = Path(GlobalVar["output"]) ## Variable pour la suite self.IDXTemp = Path(self.FolderTemp, self.IDX.name) self.SUBTemp = Path(self.FolderTemp, self.SUB.name) self.Generic = self.IDXTemp.with_suffix("") self.TotalSubtitles = 0 self.RecognizedNumber = 0 self.RecognizedTotal = 0 ##################### ### Vérifications ### ##################### #self.close() ### Arrêt du travail si la langue n'est pas supportée par Tesseract if not GlobalVar["l"] in GlobalVar["TesseractLanguages"]: ## Message d'information Window = QtWidgets.QMessageBox(3, QtCore.QCoreApplication.translate("main", "Tesseract langs error"), QtCore.QCoreApplication.translate("main", "The subtitle language is not avaible in Tesseract list langs:\n{}").format("\n".join(GlobalVar["TesseractLanguages"])), QtWidgets.QMessageBox.Close, None, QtCore.Qt.WindowSystemMenuHint) Button = QtWidgets.QPushButton(QtGui.QIcon.fromTheme("preferences-desktop-locale", QtGui.QIcon(":/img/preferences-desktop-locale.png")), QtCore.QCoreApplication.translate("main", "Use another language"), Window) Window.addButton(Button, QtWidgets.QMessageBox.YesRole) # Ajout du bouton Window.exec() # Message d'information ## Arret de la fonction if Window.buttonRole(Window.clickedButton()) != 5: pass #self.close() ## Proposition d'une autre langue OtherLanguage = QtWidgets.QInputDialog.getItem(self, QtCore.QCoreApplication.translate("main", "Use another language"), QtCore.QCoreApplication.translate("main", "Choose what another language use for read the images with Tesseract:"), GlobalVar["TesseractLanguages"], 0, False) ## Utilisation d'une autre langue ou arret if OtherLanguage[1]: GlobalVar["l"] = OtherLanguage[0] else: pass #self.close() ### Vérifications des fichiers d'entrée et sortie if not self.IDX.exists(): print(QtCore.QCoreApplication.translate("main", "Error: The IDX input file doesn't exists."), file=sys.stderr) #self.close() elif self.SRT.is_dir(): print(QtCore.QCoreApplication.translate("main", "Error: The SRT output is not a file but is a folder."), file=sys.stderr) #self.close() #-------------------------------------------------------------------- # pour mise au point: met en place un nouveau menu popup self.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) self.customContextMenuRequested.connect(self.popupmenu) # ======================================================================= def popupmenu(self, position): """pour mise au point: menu popup """ # crée l'objet "menu popup" popupmenu = QtWidgets.QMenu(self) # ajoute une ligne dans la liste des items du menu actionQuitter = popupmenu.addAction("Arrêt du programme") actionQuitter.triggered.connect(self.quitter) # exécute le menu popup popupmenu.exec_(self.mapToGlobal(position)) #======================================================================== def quitter(self): print("on passe dans le quitter") self.close() #======================================================================== def closeEvent(self, event): print("on passe dans le closeEvent") if not self.FolderTempWidget.remove(): print(QtCore.QCoreApplication.translate("main", "Error: The temporary folder was not deleted."), file=sys.stderr) event.accept() ############################################################################# if __name__ == '__main__': #################### ### QtWidgets.QApplication ### #################### app = QtWidgets.QApplication(sys.argv) app.setApplicationVersion("1.0") app.setApplicationName("Qtesseract") #################################### ### Langues dispo dans Tesseract ### #################################### ### Récupération de la liste des langues de Tesseract et ajout des langues de 3 caracteres GlobalVar["TesseractLanguages"] = ["fra", "eng"] ######################## ### Parser de config ### ######################## ### Création des options qOption = QtCore.QCommandLineOption(["q", "quiet"], QtCore.QCoreApplication.translate("main", "Don't reply informations, optionally."), "", "False") lOption = QtCore.QCommandLineOption(["l", "language"], QtCore.QCoreApplication.translate("main", "Language to use for Tesseract ({})."), QtCore.QCoreApplication.translate("main", "Lang"), "eng") cOption = QtCore.QCommandLineOption(["c", "cpu"], QtCore.QCoreApplication.translate("main", "Number of cpu to use, by default is the max."), QtCore.QCoreApplication.translate("main", "Number"), str(cpu_count())) ### Création du parser parser = QtCore.QCommandLineParser() parser.setApplicationDescription(QtCore.QCoreApplication.translate("main", "This software convert a IDX/SUB file in SRT (text) file with Tesseract, subp2pgm and subptools.")) parser.addHelpOption() parser.addVersionOption() parser.addOption(qOption) parser.addOption(lOption) parser.addOption(cOption) parser.addPositionalArgument(QtCore.QCoreApplication.translate("main", "source"), QtCore.QCoreApplication.translate("main", "Source IDX file to translate.")) parser.addPositionalArgument(QtCore.QCoreApplication.translate("main", "destination"), QtCore.QCoreApplication.translate("main", "Destination SRT file translated.")) parser.process(app) ### S'il n'y a pas de fichier d'entré et de sortie, on affiche l'aide if len(parser.positionalArguments()) < 2: print(QtCore.QCoreApplication.translate("main", "Error: Missing the IDX input file or SRT output file, or both."), "\n", file=sys.stderr) parser.showHelp() ### Récupération des options et valeurs GlobalVar["input"] = parser.positionalArguments()[-2] GlobalVar["output"] = parser.positionalArguments()[-1] GlobalVar["q"] = parser.isSet(qOption) GlobalVar["l"] = parser.value(lOption) GlobalVar["c"] = int(parser.value(cOption)) ############################# ### Lancement du logiciel ### ############################# qtesseract = Qtesseract() qtesseract.setAttribute(QtCore.Qt.WA_DeleteOnClose) qtesseract.show() sys.exit(app.exec_())