def stop(self):
     try:
         self.cap.release()
         self.terminate()
     except:
         texto = "Ten paciencia. Has pulsado dos veces. Vuelve a pulsar para reconfigurar el boton"
         crea_mensaje_alerta(texto)
    def obten_nombre_patogeno_analisis(self, nombre_boton):
        try:
            self.id_analisis = TEXTO_CARPETAS_ANALISIS[
                self.path_seleccionado_del_directorio.split('/')[-2]]
        except:
            texto = "Debes de seleccionar antes una carpeta de referencia (COLUMNA CENTRAL)"
            crea_mensaje_alerta(texto)

        self.id_num = ""
        self.id_patogeno = f"_{TEXTO_BOTONES_PATOGENO[nombre_boton.text()]}"
        self.forma_nombre_imagen()
    def fn_boton_validar(self):
        """Se utiliza el diccioanrio de coordenadas y defectos para crear un fichero xml y dos imagenes, una pintada, y otra sin pintar"
        """
        try:
            nombre_cliente_comboBox = self.comboBox_ampolla.currentText()
            nombre_cliente = DICCIONARIO_COORDENADAS_PRODUCTO[
                nombre_cliente_comboBox][2]

            self.DICC_COORDENADAS_PRODUCTOS_AUX[nombre_cliente_comboBox][1] = [
                [
                    0, 0,
                    self.imagen_capturada.width(),
                    self.imagen_capturada.height()
                ]
            ]
            self.DICC_COORDENADAS_PRODUCTOS_AUX2[nombre_cliente_comboBox][
                1] = [[
                    0, 0,
                    self.imagen_capturada2.width(),
                    self.imagen_capturada2.height()
                ]]

            guarda_imagen_y_anotacion(imagen_pintada=self.visor.pixmap(),
                                      imagen_original=self.imagen_capturada,
                                      DICC_COORDENADAS_DEFECTOS_AUX=self.
                                      DICC_COORDENADAS_DEFECTOS_AUX,
                                      DICC_COORDENADAS_PRODUCTOS_AUX=self.
                                      DICC_COORDENADAS_PRODUCTOS_AUX,
                                      imagen_pintada2=self.visor_2.pixmap(),
                                      imagen_original2=self.imagen_capturada2,
                                      DICC_COORDENADAS_DEFECTOS_AUX2=self.
                                      DICC_COORDENADAS_DEFECTOS_AUX2,
                                      DICC_COORDENADAS_PRODUCTOS_AUX2=self.
                                      DICC_COORDENADAS_PRODUCTOS_AUX2,
                                      nombre_cliente=nombre_cliente)

            self.visor.clear()
            self.visor_2.clear()
            elimina_imagen_temporal()
            self.detecta_imagen()

            self.COORDENADAS_DEFECTOS = []
            self.COORDENADAS2_DEFECTOS = []
            self.COORDENADAS_PRODUCTOS = []
            self.COORDENADAS2_PRODUCTOS = []
            self.FLAG_CAPTURA_IMAGEN = False
            self.NUEVA_IMAGEN = True
            self.comboBox_ampolla_error.setCurrentIndex(0)

        except:
            crea_mensaje_alerta("Selecciona antes el tipo de ampolla")
            self.boton_cancelar.setEnabled(True)
            self.boton_validar.setEnabled(True)
    def recibePrediccion(self, prediccion):
        "Se obtiene un diccionario con los paths de las imagenes y la prediccion"

        self.prediccionQThread.stop()
        try:
            guarda_ImagenFichero_prediccion(prediccion)
        except:
            texto = "Todas las placas han sido ya evaluadas"
            Main.setDisabled(self, False)
            self.progresBar.setValue(0)
            crea_mensaje_alerta(texto)

        Main.setDisabled(self, False)
        self.progresBar.setValue(100)
    def fn_boton_anadir_carpeta(self):
        nombre_nueva_carpeta = self.edit_nombre_nueva_carpeta.text()
        if len(nombre_nueva_carpeta) != 0:
            index = self.lista_analisis.currentIndex()
            path_nueva_carpeta_aux = self.dirModel.filePath(index)
            path_nueva_carpeta = f"{path_nueva_carpeta_aux}/{nombre_nueva_carpeta}"

            try:
                os.mkdir(path_nueva_carpeta)

            except:
                texto = "La carpeta que intentas crear ya existe"
                crea_mensaje_alerta(texto)

        else:
            texto = "No has introducido ningun nombre de carpeta"
            crea_mensaje_alerta(texto)
    def mousePressEvent2(self, event):
        """Depende del flag activado, se dibuja o se borra. Se comprueba si el click se ha realizado dentro de la imagen,
        se ve el tipo de defecto seleccionado, y se dibuja de su respectivo color teniendo en cuenta los factores de
        escala.En el caso de borrar, se comrprueba que el click se ha realizado dentro de la region, se elimina esta,
        y se vuelve a dibujar el resto automaticamente"""

        if self.FLAG_DIBUJAR:

            if self.FLAG_PRIMER_CLICK:
                self.primer_click = self.visor_2.mapFromParent(event.pos())
                self.primer_click_x = self.primer_click.x() + (
                    self.ancho_zonaClick_imagen2[1]
                ) + self.dim_horizontal_spacer
                self.primer_click_y = self.primer_click.y()

                if comprueba_click_dentro_imagen(self.primer_click_x,
                                                 self.primer_click_y,
                                                 self.ancho_zonaClick_imagen2,
                                                 self.alto_zonaClick_imagen2):

                    self.FLAG_PRIMER_CLICK = False
                    self.FLAG_SEGUNDO_CLICK = True

                else:
                    self.FLAG_PRIMER_CLICK = True
                    self.FLAG_SEGUNDO_CLICK = False

            elif self.FLAG_SEGUNDO_CLICK:
                try:
                    color = COLORES_DEFECTOS[self.id_tipo_defecto]

                    self.segundo_click = self.visor_2.mapFromParent(
                        event.pos())
                    self.segundo_click_x = self.segundo_click.x() + (
                        self.ancho_zonaClick_imagen2[1]
                    ) + self.dim_horizontal_spacer
                    self.segundo_click_y = self.segundo_click.y()

                    if comprueba_click_dentro_imagen(
                            self.segundo_click_x, self.segundo_click_y,
                            self.ancho_zonaClick_imagen2,
                            self.alto_zonaClick_imagen2):

                        self.FLAG_PRIMER_CLICK = True
                        self.FLAG_SEGUNDO_CLICK = False

                        dibuja_region(QPainter(self.visor_2.pixmap()),
                                      self.primer_click_x, self.primer_click_y,
                                      self.segundo_click_x,
                                      self.segundo_click_y, color, 3,
                                      self.offset_X2, self.offset_Y2)

                        self.update()
                        self.visor_2.update()

                        if self.DEFECTO_CLICK:

                            self.COORDENADAS2_DEFECTOS = [
                                int(
                                    min([
                                        self.primer_click_x - self.offset_X2,
                                        self.segundo_click_x - self.offset_X2
                                    ]) / self.factor_escala_dimension_x2),
                                int(
                                    min([
                                        self.primer_click_y - self.offset_Y2,
                                        self.segundo_click_y - self.offset_Y2
                                    ]) / self.factor_escala_dimension_y2),
                                int(
                                    max([
                                        self.primer_click_x - self.offset_X2,
                                        self.segundo_click_x - self.offset_X2
                                    ]) / self.factor_escala_dimension_x2),
                                int(
                                    max([
                                        self.primer_click_y - self.offset_Y2,
                                        self.segundo_click_y - self.offset_Y2
                                    ]) / self.factor_escala_dimension_y2)
                            ]

                            # Se va actualizando un diccionario que contiene las clases de los defectos y las coordenadas de cada una de las regiones

                            self.DICC_COORDENADAS_DEFECTOS_AUX2 = almacena_coordenadas_y_defecto(
                                self.COORDENADAS2_DEFECTOS,
                                self.id_tipo_defecto,
                                self.DICC_COORDENADAS_DEFECTOS_AUX2,
                                flag_nueva_imagen=self.NUEVA_IMAGEN)

                        else:

                            self.COORDENADAS2_PRODUCTOS = [
                                int(
                                    min([
                                        self.primer_click_x - self.offset_X2,
                                        self.segundo_click_x - self.offset_X2
                                    ]) / self.factor_escala_dimension_x2),
                                int(
                                    min([
                                        self.primer_click_y - self.offset_Y2,
                                        self.segundo_click_y - self.offset_Y2
                                    ]) / self.factor_escala_dimension_y2),
                                int(
                                    max([
                                        self.primer_click_x - self.offset_X2,
                                        self.segundo_click_x - self.offset_X2
                                    ]) / self.factor_escala_dimension_x2),
                                int(
                                    max([
                                        self.primer_click_y - self.offset_Y2,
                                        self.segundo_click_y - self.offset_Y2
                                    ]) / self.factor_escala_dimension_y2)
                            ]

                            # Se va actualizando un diccionario que contiene las clases de los defectos y las coordenadas de cada una de las regiones

                            self.DICC_COORDENADAS_PRODUCTOS_AUX2 = almacena_coordenadas_y_producto(
                                self.COORDENADAS2_PRODUCTOS,
                                self.id_tipo_producto_error,
                                self.DICC_COORDENADAS_PRODUCTOS_AUX2,
                                flag_nueva_imagen=self.NUEVA_IMAGEN)

                        # Se activa el boton de borrar por si se quiere borrar la coordenada introducida
                        self.boton_borrar.setEnabled(True)
                        self.boton_validar.setEnabled(True)
                        self.boton_cancelar.setEnabled(True)
                        self.NUEVA_IMAGEN = False

                    else:
                        self.FLAG_PRIMER_CLICK = False
                        self.FLAG_SEGUNDO_CLICK = True
                except:
                    crea_mensaje_alerta(
                        "Si vas a dibujar sobre la imagen, primero selecciona un tipo de defecto."
                    )

        elif self.FLAG_BORRAR:

            self.click_borrar = self.visor_2.mapFromParent(event.pos())
            self.click_borrar_x = self.click_borrar.x() + (
                self.ancho_zonaClick_imagen2[1]) + self.dim_horizontal_spacer
            self.click_borrar_y = self.click_borrar.y()

            if comprueba_click_dentro_imagen(self.click_borrar_x,
                                             self.click_borrar_x,
                                             self.ancho_zonaClick_imagen2,
                                             self.alto_zonaClick_imagen2):

                # self.FLAG_PRIMER_CLICK = True
                # self.FLAG_SEGUNDO_CLICK = False

                coordenadas_click = [(self.click_borrar_x),
                                     (self.click_borrar_y)]

                self.DICC_COORDENADAS_DEFECTOS_AUX2, click_correcto1 = borrar_region(
                    coordenadas_click, self.DICC_COORDENADAS_DEFECTOS_AUX2,
                    self.offset_X2, self.offset_Y2,
                    self.factor_escala_dimension_x2,
                    self.factor_escala_dimension_y2)
                self.DICC_COORDENADAS_PRODUCTOS_AUX2, click_correcto2 = borrar_region(
                    coordenadas_click, self.DICC_COORDENADAS_PRODUCTOS_AUX2,
                    self.offset_X2, self.offset_Y2,
                    self.factor_escala_dimension_x2,
                    self.factor_escala_dimension_y2)

                if click_correcto1 or click_correcto2:
                    self.coloca_imagen_en_visor(self.imagen_capturada,
                                                self.imagen_capturada2,
                                                self.FLAG_BORRAR)

                    for keys, values in self.DICC_COORDENADAS_DEFECTOS_AUX2.items(
                    ):
                        if values[1] != '-':
                            try:
                                color = COLORES_DEFECTOS[keys]

                            except:
                                color = 'black'

                            for coordenadas in values[1]:

                                coordenada_x_min = coordenadas[0] * \
                                    self.factor_escala_dimension_x2
                                coordenada_y_min = coordenadas[1] * \
                                    self.factor_escala_dimension_y2
                                coordenada_x_max = coordenadas[2] * \
                                    self.factor_escala_dimension_x2
                                coordenada_y_max = coordenadas[3] * \
                                    self.factor_escala_dimension_y2

                                dibuja_region(QPainter(self.visor_2.pixmap()),
                                              coordenada_x_min,
                                              coordenada_y_min,
                                              coordenada_x_max,
                                              coordenada_y_max, color, 3, 0, 0)

                    for keys, values in self.DICC_COORDENADAS_DEFECTOS_AUX.items(
                    ):
                        if values[1] != '-':
                            try:
                                color = COLORES_DEFECTOS[keys]

                            except:
                                color = 'black'

                            for coordenadas in values[1]:

                                coordenada_x_min = coordenadas[0] * \
                                    self.factor_escala_dimension_x
                                coordenada_y_min = coordenadas[1] * \
                                    self.factor_escala_dimension_y
                                coordenada_x_max = coordenadas[2] * \
                                    self.factor_escala_dimension_x
                                coordenada_y_max = coordenadas[3] * \
                                    self.factor_escala_dimension_y

                                dibuja_region(QPainter(self.visor.pixmap()),
                                              coordenada_x_min,
                                              coordenada_y_min,
                                              coordenada_x_max,
                                              coordenada_y_max, color, 3, 0, 0)

                        else:
                            continue

                    for keys, values in self.DICC_COORDENADAS_PRODUCTOS_AUX.items(
                    ):
                        if values[1] != '-':
                            try:
                                color = COLORES_DEFECTOS[keys]

                            except:
                                color = 'black'

                            for coordenadas in values[1]:

                                coordenada_x_min = coordenadas[0] * \
                                    self.factor_escala_dimension_x
                                coordenada_y_min = coordenadas[1] * \
                                    self.factor_escala_dimension_y
                                coordenada_x_max = coordenadas[2] * \
                                    self.factor_escala_dimension_x
                                coordenada_y_max = coordenadas[3] * \
                                    self.factor_escala_dimension_y

                                dibuja_region(QPainter(self.visor.pixmap()),
                                              coordenada_x_min,
                                              coordenada_y_min,
                                              coordenada_x_max,
                                              coordenada_y_max, color, 3, 0, 0)

                        else:
                            continue

                    for keys, values in self.DICC_COORDENADAS_PRODUCTOS_AUX2.items(
                    ):
                        if values[1] != '-':
                            try:
                                color = COLORES_DEFECTOS[keys]

                            except:
                                color = 'black'

                            for coordenadas in values[1]:

                                coordenada_x_min = coordenadas[0] * \
                                    self.factor_escala_dimension_x
                                coordenada_y_min = coordenadas[1] * \
                                    self.factor_escala_dimension_y
                                coordenada_x_max = coordenadas[2] * \
                                    self.factor_escala_dimension_x
                                coordenada_y_max = coordenadas[3] * \
                                    self.factor_escala_dimension_y

                                dibuja_region(QPainter(self.visor_2.pixmap()),
                                              coordenada_x_min,
                                              coordenada_y_min,
                                              coordenada_x_max,
                                              coordenada_y_max, color, 3, 0, 0)