예제 #1
0
 def __init__(self, parent=None):
     Frame.__init__(self, parent)
     self.pack(expand=YES, fill=BOTH)
     self.movimientoLibre = False
     self.tiempoInicial = 0
     self.tiempoFinal = 0
     self.tiempoDeTratamientoImagen = 0
     self.enMovimiento = False
     self.tiempoInicioMovimiento = 0
     self.angulosActuales = []
     self.angulosAnteriores = []
     self.diferenciaAngulos = [0, 0, 0]
     self.imagenTratada = ImagenTratada()
     self.acciones = Acciones()
     self.creaElementos()
     self.inicioCicloEjecucion()
     self.master.title('Control Experimental Brazo Robotico')
     self.master.iconname('Control Experimental Brazo Robotico')
	def __init__(self, parent=None):
		Frame.__init__(self, parent)
		self.pack(expand=YES, fill=BOTH)
		self.nivelR = IntVar()
		self.nivelR.set(125)
		self.nivelG = IntVar() 
		self.nivelG.set(125)
		self.nivelB = IntVar()
		self.nivelB.set(125)
		self.tiempoInicial = 0
		self.tiempoFinal = 0
		self.tiempoDeEjecucion = 0
		self.imagenTratada = ImagenTratada()
		self.creaElementos()
		self.iniciaAjustesyVisoresImagenes()
		self.master.title('Ajustes Visuales para el Control Experimental Brazo Robotico')
		self.master.iconname('Ajustes Visuales')
	def __init__(self, parent=None):
		Frame.__init__(self, parent)
		self.pack(expand=YES, fill=BOTH)
		self.movimientoLibre = False
		self.tiempoInicial = 0
		self.tiempoFinal = 0
		self.tiempoDeTratamientoImagen = 0
		self.enMovimiento = False
		self.tiempoInicioMovimiento = 0
		self.angulosActuales = []
		self.angulosAnteriores = []
		self.diferenciaAngulos = [0,0,0]
		self.imagenTratada = ImagenTratada()
		self.acciones = Acciones()
		self.creaElementos()
		self.inicioCicloEjecucion()
		self.master.title('Control Experimental Brazo Robotico')
		self.master.iconname('Control Experimental Brazo Robotico')
예제 #4
0
class GUI(Frame):
    def __init__(self, parent=None):
        Frame.__init__(self, parent)
        self.pack(expand=YES, fill=BOTH)
        self.movimientoLibre = False
        self.tiempoInicial = 0
        self.tiempoFinal = 0
        self.tiempoDeTratamientoImagen = 0
        self.enMovimiento = False
        self.tiempoInicioMovimiento = 0
        self.angulosActuales = []
        self.angulosAnteriores = []
        self.diferenciaAngulos = [0, 0, 0]
        self.imagenTratada = ImagenTratada()
        self.acciones = Acciones()
        self.creaElementos()
        self.inicioCicloEjecucion()
        self.master.title('Control Experimental Brazo Robotico')
        self.master.iconname('Control Experimental Brazo Robotico')

    def creaElementos(self):
        self.creaBarraMenus()
        self.creaAreaSuperior()
        self.creaAreaInferior()
        self.creaAreaIntermedia()

    def creaAreaSuperior(self):
        self.areaSuperior = Frame(self, cursor='hand2', relief=SUNKEN, bd=2)
        self.areaSuperior.pack(side=TOP, fill=X)
        self.creaAreaVisorImagen(self.areaSuperior)
        self.creaAreaVisorAngulos(self.areaSuperior)

    def creaAreaIntermedia(self):
        self.areaIntermedia = Frame(self, cursor='hand2', relief=SUNKEN, bd=2)
        self.areaIntermedia.pack(side=BOTTOM, fill=X, anchor=N)
        self.creaAreaControlesAproximados(self.areaIntermedia)
        self.creaAreaControlesExactos(self.areaIntermedia)

    def creaAreaInferior(self):
        self.areaInferior = Frame(self, cursor='hand2', relief=SUNKEN, bd=2)
        self.areaInferior.pack(side=BOTTOM, fill=X)
        self.creaAreaStop(self.areaInferior)

    def creaBarraMenus(self):
        self.menubar = Menu(self.master)
        self.master.config(menu=self.menubar)
        self.menuAjustes()
        self.menuBrazo()

    def menuAjustes(self):
        miniMenu = Menu(self.menubar)
        miniMenu.add_command(label='Cargar Ajustes...',
                             command=self.cargaAjustes)
        miniMenu.add_command(label='Salir...', command=self.quit)
        self.menubar.add_cascade(label='Ajustes', underline=0, menu=miniMenu)

    def menuBrazo(self):
        miniMenu = Menu(self.menubar)
        miniMenu.add_command(label='Mover solo si se ven los marcadores',
                             command=lambda: self.hacerMovimientoLibre(False))
        miniMenu.add_command(label='Mover siempre',
                             command=lambda: self.hacerMovimientoLibre(True))
        self.menubar.add_cascade(label='Brazo', underline=0, menu=miniMenu)

    def hacerMovimientoLibre(self, decision):
        if decision == True:
            self.movimientoLibre = True
        else:
            self.movimientoLibre = False

    def cargaAjustes(self):
        archivo = askopenfilename(initialdir='/imagen/MisAjustes')
        self.imagenTratada.cargaAjustes(archivo)

    def aunPorHacer(self):
        print "Funcion aun por implementar"

    def quit(self):
        if askyesno('Verificacion de Salida', 'Estas seguro de querer salir?'):
            Frame.quit(self)

    def creaAreaVisorImagen(self, frame):
        self.areaVisorImagen = Frame(frame,
                                     cursor='hand2',
                                     relief=SUNKEN,
                                     bd=2)
        self.areaVisorImagen.pack(side=LEFT, fill=X)
        self.creaVisorImagen(self.areaVisorImagen)

    def creaVisorImagen(self, frame):
        self.visorImagen = Label(frame, text='Area visor Imagen')
        self.visorImagen.pack(side=LEFT, fill=X)

    def creaAreaVisorAngulos(self, frame):
        self.areaVisorAngulosActuales = Frame(frame,
                                              cursor='hand2',
                                              relief=SUNKEN,
                                              bd=2)
        self.areaVisorAngulosActuales.pack(side=TOP, fill=X)
        self.creaVisoresAngulosActuales(self.areaVisorAngulosActuales)

        self.ponerSeparadores(frame, 1)

        self.areaVisorAngulosAnteriores = Frame(frame,
                                                cursor='hand2',
                                                relief=SUNKEN,
                                                bd=2)
        self.areaVisorAngulosAnteriores.pack(side=TOP, fill=X)
        self.creaVisoresAngulosAnteriores(self.areaVisorAngulosAnteriores)

        self.ponerSeparadores(frame, 1)

        self.areaVisorAngulosDiferencia = Frame(frame,
                                                cursor='hand2',
                                                relief=SUNKEN,
                                                bd=2)
        self.areaVisorAngulosDiferencia.pack(side=TOP, fill=X)
        self.creaVisoresAngulosDiferencia(self.areaVisorAngulosDiferencia)

    def creaVisoresAngulosActuales(self, frame):
        self.visorAngulosActuales = []
        self.creaVisorAngulosGenerico(self.visorAngulosActuales,
                                      'Angulos Actuales', frame)

    def creaVisoresAngulosAnteriores(self, frame):
        self.visorAngulosAnteriores = []
        self.creaVisorAngulosGenerico(self.visorAngulosAnteriores,
                                      'Angulos Anteriores', frame)

    def creaVisoresAngulosDiferencia(self, frame):
        self.visorAngulosDiferencia = []
        self.creaVisorAngulosGenerico(self.visorAngulosDiferencia,
                                      'Diferencia Angulos', frame)

    def creaVisorAngulosGenerico(self, visorAngulos, texto, frame):
        for i in range(3):
            visor = Tkinter.Message(frame)
            visor.config(font=('times', 8), width=70, text=texto)
            visor.pack(side=LEFT, fill=X, expand=YES)
            visorAngulos.append(visor)

    def creaAreaControlesAproximados(self, frame):
        self.areaControlesAproximados = Frame(frame,
                                              cursor='hand2',
                                              relief=SUNKEN,
                                              bd=2)
        self.areaControlesAproximados.pack(side=LEFT, fill=X)
        self.creaControlesAproximados(self.areaControlesAproximados)

    def creaControlesAproximados(self, frame):
        #Empiezo colocando cosas por la parte de abajo del frame
        # para que el pack() no me de problemas
        areaAux = Frame(frame, cursor='hand2', bd=2)
        areaAux.pack(side=BOTTOM, fill=X)
        self.ponerSeparadores(areaAux, 1)
        Button(areaAux, text=' - ',
               command=lambda: self.mueveBase('izq')).pack(side=LEFT)
        Label(areaAux, text='Base ').pack(side=LEFT)
        Button(areaAux, text=' + ',
               command=lambda: self.mueveBase('der')).pack(side=LEFT)
        Label(areaAux, text='  ').pack(side=LEFT)
        Button(areaAux, text=' - ',
               command=lambda: self.muevePinza('cerrar')).pack(side=LEFT)
        Label(areaAux, text='Pinza ').pack(side=LEFT)
        Button(areaAux, text=' + ',
               command=lambda: self.muevePinza('abrir')).pack(side=LEFT)
        Label(areaAux, text='  ').pack(side=LEFT)
        Button(areaAux, text=' - ',
               command=lambda: self.luz('apagar')).pack(side=LEFT)
        Label(areaAux, text='Luz ').pack(side=LEFT)
        Button(areaAux, text=' + ',
               command=lambda: self.luz('encender')).pack(side=LEFT)
        Label(areaAux, text='  ').pack(side=LEFT)

        self.tiempoMovimiento = DoubleVar()
        self.deslizableTiempo = Scale(frame,
                                      label='tiempo de movimiento ',
                                      variable=self.tiempoMovimiento,
                                      from_=0,
                                      to=2,
                                      tickinterval=0.25,
                                      resolution=0.05,
                                      orient='horizontal',
                                      length=320)
        self.deslizableTiempo.pack(side=TOP, fill=X)
        self.tiempoMovimiento.set(0.5)

        self.ponerSeparadores(frame, 1)
        self.ponerBotonesAngulo(frame, 1)
        self.ponerBotonesAngulo(frame, 2)
        self.ponerBotonesAngulo(frame, 3)

    def ponerBotonesAngulo(self, frame, numAngulo):
        Button(frame,
               text=' - ',
               command=lambda: self.disminuyeAngulo(numAngulo)).pack(side=LEFT)
        Label(frame, text='Angulo ' + str(numAngulo)).pack(side=LEFT)
        Button(frame,
               text=' + ',
               command=lambda: self.aumentaAngulo(numAngulo)).pack(side=LEFT)
        Label(frame, text='  ').pack(side=LEFT)

    def iniciarMovimiento(self):
        """ Solo inicia el movimieno si tiene una lista de angulos actuales buena 
		Devuelve True si ha podido iniciar el movimiento y false en caso contrario"""
        if self.movimientoLibre:
            return True

        if self.angulosActuales == []:
            print(
                "No se puede iniciar el movimiento al no disponer de los angulos iniciales"
            )
            return False
        else:
            self.enMovimiento = True
            self.tiempoInicioMovimiento = time.time()
            self.angulosAnteriores = self.angulosActuales[:]  # Copia una lista en otra
            return True

    def finalizarMovimiento(self):
        if self.movimientoLibre:
            return True

        self.enMovimiento = False
        for i in range(3):
            self.diferenciaAngulos[i] = abs(self.angulosAnteriores[i] -
                                            self.angulosActuales[i])

    def aumentaAngulo(self, numAngulo):
        if self.iniciarMovimiento():
            print("Aumentando angulo {} con un tiempo {}".format(
                numAngulo, self.tiempoMovimiento.get()))
            self.acciones.tiempo = self.tiempoMovimiento.get()
            if numAngulo == 3:
                self.acciones.actuar('subir-hombro')
            elif numAngulo == 2:
                self.acciones.actuar('subir-codo')
            elif numAngulo == 1:
                self.acciones.actuar('subir-munneca')
            else:
                pass

    def mueveBase(self, comando):
        if self.iniciarMovimiento():
            self.acciones.tiempo = self.tiempoMovimiento.get()
            if comando == 'izq':
                self.acciones.actuar('base-izquierda')
            elif comando == 'der':
                self.acciones.actuar('base-derecha')
            else:
                pass

    def muevePinza(self, comando):
        if self.iniciarMovimiento():
            self.acciones.tiempo = self.tiempoMovimiento.get()
            if comando == 'abrir':
                self.acciones.actuar('abrir-pinza')
            elif comando == 'cerrar':
                self.acciones.actuar('cerrar-pinza')
            else:
                pass

    def luz(self, comando):
        if self.iniciarMovimiento():
            self.acciones.tiempo = self.tiempoMovimiento.get()
            if comando == 'encender':
                self.acciones.actuar('encender-luz')
            elif comando == 'apagar':
                self.acciones.actuar('apagar-luz')
            else:
                pass

    def disminuyeAngulo(self, numAngulo):
        if self.iniciarMovimiento():
            print("Disminuyendo angulo {} con un tiempo {}".format(
                numAngulo, self.tiempoMovimiento.get()))
            self.acciones.tiempo = self.tiempoMovimiento.get()
            if numAngulo == 3:
                self.acciones.actuar('bajar-hombro')
            elif numAngulo == 2:
                self.acciones.actuar('bajar-codo')
            elif numAngulo == 1:
                self.acciones.actuar('bajar-munneca')
            else:
                pass

    def creaAreaControlesExactos(self, frame):
        self.areaControlesExactos = Frame(frame,
                                          cursor='hand2',
                                          relief=SUNKEN,
                                          bd=2)
        self.areaControlesExactos.pack(side=LEFT, fill=X)
        self.creaControlesExactos(self.areaControlesExactos)

    def creaControlesExactos(self, frame):
        self.areaAngulo1 = Frame(frame, cursor='hand2', relief=SUNKEN, bd=2)
        self.areaAngulo1.pack(side=TOP, fill=X)
        self.creaControlAngulo1(self.areaAngulo1)

        self.ponerSeparadores(frame, 1)

        self.areaAngulo2 = Frame(frame, cursor='hand2', relief=SUNKEN, bd=2)
        self.areaAngulo2.pack(side=TOP, fill=X)
        self.creaControlAngulo2(self.areaAngulo2)

        self.ponerSeparadores(frame, 1)

        self.areaAngulo3 = Frame(frame, cursor='hand2', relief=SUNKEN, bd=2)
        self.areaAngulo3.pack(side=TOP, fill=X)
        self.creaControlAngulo3(self.areaAngulo3)

    def creaControlAngulo1(self, frame):
        control1 = Label(frame, text='Angulo1')
        control1.pack(side=LEFT, fill=X, expand=YES)
        self.entradaAngulo1 = Entry(frame)
        self.entradaAngulo1.pack(side=LEFT)
        self.entradaAngulo1.bind('<Return>',
                                 (lambda event: self.imprimeEntradas()))

    def creaControlAngulo2(self, frame):
        control2 = Label(frame, text='Angulo2')
        control2.pack(side=LEFT, fill=X, expand=YES)
        self.entradaAngulo2 = Entry(frame)
        self.entradaAngulo2.pack(side=LEFT)
        self.entradaAngulo2.bind('<Return>',
                                 (lambda event: self.imprimeEntradas()))

    def creaControlAngulo3(self, frame):
        control3 = Label(frame, text='Angulo3')
        control3.pack(side=LEFT, fill=X, expand=YES)
        self.entradaAngulo3 = Entry(frame)
        self.entradaAngulo3.pack(side=LEFT)
        self.entradaAngulo3.bind('<Return>',
                                 (lambda event: self.imprimeEntradas()))

    def imprimeEntradas(self):
        print(self.entradaAngulo1.get())
        print(self.entradaAngulo2.get())
        print(self.entradaAngulo3.get())
        print("")

    def creaAreaStop(self, frame):
        self.areaAreaStop = Frame(frame, cursor='hand2', relief=SUNKEN, bd=2)
        self.areaAreaStop.pack(side=BOTTOM, fill=X)
        self.creaControlStop(self.areaAreaStop)

    def creaControlStop(self, frame):
        self.controlStop = Button(frame,
                                  text='Parar',
                                  command=self.acciones.actuar('parar'))
        self.controlStop.pack(side=RIGHT)
        texto = "Tiempo tratamiento: {} ".format(
            self.tiempoDeTratamientoImagen)
        self.etiquetaTiempo = Label(frame, text=texto)
        self.etiquetaTiempo.pack(side=LEFT)

    def inicioCicloEjecucion(self):
        self.actualizaVisorImagen()

    # ------------------------------------------------------------------
    # Ejecucion en ciclica de las siguientes funciones

    # actualizaVisorImagen ->
    # actualizaVisorAngulos ->

    # actualizaVisorImagen ->
    # actualizaVisorAngulos ->
    # etc ...
    # ------------------------------------------------------------------

    def actualizaVisorImagen(self):
        self.tiempoInicial = time.time()

        img, self.angulosActuales = self.imagenTratada.capturaTrataYFiltraBlobsDeImagen(
        )

        photo = ImageTk.PhotoImage(img.getPIL())
        self.visorImagen.photo = photo
        self.visorImagen.configure(image=photo)
        self.visorImagen.after(10, self.actualizaVisorAngulos)

    def actualizaVisorAngulos(self):
        actualizarAnterioresYDiferencias = False
        if self.enMovimiento:
            tiempoEnMovimiento = time.time() - self.tiempoInicioMovimiento
            print("Tiempo en movimiento: {}".format(tiempoEnMovimiento))
            if tiempoEnMovimiento > self.acciones.tiempo + 2 * self.tiempoDeTratamientoImagen:
                if self.angulosActuales != []:
                    self.finalizarMovimiento()
                    actualizarAnterioresYDiferencias = True
                    print("")

        if self.angulosActuales == []:
            for i in range(3):
                texto = "Angulo Actual {0}: --- grados ".format(str(i + 1))
                self.visorAngulosActuales[i].config(text=texto)
        else:
            for i, angulo in enumerate(self.angulosActuales):
                texto = "Angulo Actual {0}: {1:0.1f} grados ".format(
                    str(i + 1), angulo)
                self.visorAngulosActuales[i].config(text=texto)
                if actualizarAnterioresYDiferencias:
                    texto = "Angulo Anterior {0}: {1:0.1f} grados ".format(
                        str(i + 1), self.angulosAnteriores[i])
                    self.visorAngulosAnteriores[i].config(text=texto)
                    texto = "Diferencia Angulos {0}: {1:0.1f} grados ".format(
                        str(i + 1), self.diferenciaAngulos[i])
                    self.visorAngulosDiferencia[i].config(text=texto)

        self.tiempoFinal = time.time()
        self.tiempoDeTratamientoImagen = self.tiempoFinal - self.tiempoInicial
        #print (self.tiempoDeTratamientoImagen)
        texto = "Tiempo tratamiento: {0:0.2f} segundos ".format(
            self.tiempoDeTratamientoImagen)
        self.etiquetaTiempo.config(text=texto)

        self.actualizaVisorImagen()

    # ------------------------------------------------------------------
    # Fin de un ciclo de ejecucion
    # ------------------------------------------------------------------

    def ponerSeparadores(self, frame, num):
        for i in range(num):
            Label(frame, text="                             ").pack(side=TOP,
                                                                    expand=YES,
                                                                    fill=X)
class GUI(Frame):
	def __init__(self, parent=None):
		Frame.__init__(self, parent)
		self.pack(expand=YES, fill=BOTH)
		self.nivelR = IntVar()
		self.nivelR.set(125)
		self.nivelG = IntVar() 
		self.nivelG.set(125)
		self.nivelB = IntVar()
		self.nivelB.set(125)
		self.tiempoInicial = 0
		self.tiempoFinal = 0
		self.tiempoDeEjecucion = 0
		self.imagenTratada = ImagenTratada()
		self.creaElementos()
		self.iniciaAjustesyVisoresImagenes()
		self.master.title('Ajustes Visuales para el Control Experimental Brazo Robotico')
		self.master.iconname('Ajustes Visuales')
		
	def creaElementos(self):
		self.creaBarraMenus()
		self.creaAreaVisores()
		self.creaAreaControlesImagenOriginal()
		self.creaAreaControlesImagenTratada()
		self.creaAreaControlesVisualizacion()
		self.creaAreaVisorMensajes()
			
	def creaBarraMenus(self):
		self.menubar = Menu(self.master)
		self.master.config(menu=self.menubar)
		self.menuArchivo()
		self.menuEditar()
		self.menuImagen()
		
	def menuArchivo(self):
		miniMenu = Menu(self.menubar)
		miniMenu.add_command(label='Cargar Ajustes...', command=self.cargaAjustes)
		miniMenu.add_command(label='Guardar Ajustes...', command=self.guardaAjustes)
		miniMenu.add_command(label='Salir...', command=self.quit)
		self.menubar.add_cascade(label='Archivo', underline=0, menu=miniMenu)
		
	def menuEditar(self):
		miniMenu = Menu(self.menubar)
		miniMenu.add_command(label='Copiar...', command=self.aunPorHacer)
		miniMenu.add_command(label='Pegar...', command=self.aunPorHacer)
		self.menubar.add_cascade(label='Editar', underline=0, menu=miniMenu)
			
	def menuImagen(self):
		miniMenu = Menu(self.menubar)
		miniMenu.add_command(label='Zoom +...', command=self.aunPorHacer)
		miniMenu.add_command(label='Zoom -...', command=self.aunPorHacer)
		miniMenu.add_command(label='Capturar Imagen...', command=self.quit)
		self.menubar.add_cascade(label='Imagen', underline=0, menu=miniMenu)
	
	def guardaAjustes(self):
		archivo = asksaveasfilename(defaultextension = 'json',
									initialdir='/imagen/MisAjustes')
		self.ajustes.guardaAjustes(archivo)
	
	def cargaAjustes(self):	
		archivo = askopenfilename(initialdir='/imagen/MisAjustes')
		self.imagenTratada.cargaAjustes(archivo)
		self.actualizaControlesSegunAjustes()
		
	def actualizaControlesSegunAjustes(self):
		self.nivelR.set(self.imagenTratada.ajustes.r)
		self.nivelG.set(self.imagenTratada.ajustes.g)
		self.nivelB.set(self.imagenTratada.ajustes.b)
		self.nivelBinarizado.set(self.imagenTratada.ajustes.umbralBinarizado)
		self.areaMin.set(self.imagenTratada.ajustes.areaMin)
		self.areaMax.set(self.imagenTratada.ajustes.areaMax)
		self.toleranciaWH.set(self.imagenTratada.ajustes.toleranciaWH)
		self.desviacionD.set(self.imagenTratada.ajustes.desviacionD)
		self.toleranciaLP.set(self.imagenTratada.ajustes.toleranciaLP)
		self.visorColor.config(  bg= self.conversorRGBaHEX() )
	
	def conversorRGBaHEX(self):
		rgb = (self.nivelR.get(),self.nivelG.get(),self.nivelB.get())
		return '#' + "".join(map(chr, rgb)).encode('hex')
			
	def aunPorHacer(self):
		print "Funcion aun por implementar"
		
	def quit(self):
		if askyesno('Verificacion de Salida', 'Estas seguro de querer salir?'):
			Frame.quit(self)
			
	def creaAreaVisores(self):
		self.areaVisores = Frame(self, cursor='hand2', relief=SUNKEN, bd=2)
		self.areaVisores.pack()
		self.creaVisorImagenOriginal(self.areaVisores )
		self.creaVisorImagenBlobs(self.areaVisores )
		self.creaVisorImagenTratada(self.areaVisores )
			
	def creaVisorImagenOriginal(self, frame):
		self.visorImagenOriginal = Label(frame)
		self.visorImagenOriginal.pack(side=LEFT)
		
	def creaVisorImagenTratada(self, frame):
		self.visorImagenTratada = Label(frame)
		self.visorImagenTratada.pack(side=TOP)
		
	def creaVisorImagenBlobs(self, frame):
		self.visorImagenBlobs = Label(frame)
		self.visorImagenBlobs.pack(side=RIGHT)
		
	def creaAreaControlesImagenOriginal(self):
		self.areaControlesImg = Frame(self, cursor='hand2', relief=SUNKEN, bd=2)
		self.areaControlesImg.pack(side=LEFT, fill=X)
		self.creaAreaSeleccionColor(self.areaControlesImg)
		self.ponerSeparadores(self.areaControlesImg, 2)
		self.creaDeslizableBinarizado(self.areaControlesImg)
		
	def creaAreaControlesImagenTratada(self):
		self.areaControlesTratada = Frame(self, cursor='hand2', relief=SUNKEN, bd=2)
		self.areaControlesTratada.pack(side=RIGHT, fill=X)
		self.creaDeslizablesArea(self.areaControlesTratada)
		self.creaDeslizablesCirculo(self.areaControlesTratada)
		
	def creaAreaControlesVisualizacion(self):
		self.areaControlesTratada = Frame(self, cursor='hand2', relief=SUNKEN, bd=2)
		self.areaControlesTratada.pack(side=TOP, fill=X)
		self.creaSelectorVisualizacion(self.areaControlesTratada)
		
	def creaAreaVisorMensajes(self):
		self.areaVisorMensaje = Frame(self, cursor='hand2', relief=SUNKEN, bd=2)
		self.areaVisorMensaje.pack(side=TOP, fill=X)
		self.creaVisorMensajes(self.areaVisorMensaje)
	  
	def creaAreaSeleccionColor(self,frame):
		self.areaSeleccionColor = Frame(frame, cursor='hand2', relief=SUNKEN, bd=2)
		self.areaSeleccionColor.pack(side=TOP, fill=X)
		self.creaSelectorColor(self.areaSeleccionColor)
		self.creaVisorColor(self.areaSeleccionColor)
	
	def creaVisorColor(self,frame):
		self.visorColor = Label(frame, bg="#000000")
		self.visorColor.pack(side=RIGHT, expand=YES, fill=X)
		self.visorColor.bind('<Button-1>', self.preguntandoElColor)
	
	def actualizaVisorColor(self):
		self.visorColor.config(  bg=self.color[1] )
	
	def preguntandoElColor(self, event):
		self.preguntaElColor()
		
	def preguntaElColor(self):
		colorDevuelto = askcolor(color="#000000", title="Selector de color")
		
		if colorDevuelto[0] is not None:
			self.color = colorDevuelto		 
			self.nivelR.set(self.color[0][0])
			self.nivelG.set(self.color[0][1])
			self.nivelB.set(self.color[0][2])
			self.actualizaVisorColor()
			
	def creaSelectorColor(self, frame):
	   
		self.selectorColor = Button(frame, text = 'Selector Color ',
											command=self.preguntaElColor)
		self.selectorColor.pack(side=LEFT)
		
	
		     
	def creaDeslizableBinarizado(self, frame):
		self.nivelBinarizado = IntVar()
		self.deslizableBinarizado = Scale(frame, label = 'Binarizado ',
											variable=self.nivelBinarizado,
											from_=0, to=255,
											tickinterval=40,
											resolution=1,
											orient='horizontal',
											length=320)
		self.deslizableBinarizado.pack()
		self.nivelBinarizado.set(180)
		
		
	def creaDeslizablesArea(self, frame):
		self.areaMin = IntVar()
		self.areaMax = IntVar()
		self.deslizableAreaMin = Scale(frame, label = 'Area Minima ',
											variable=self.areaMin,
											from_=0, to=3500,
											tickinterval=500,
											resolution=20,
											orient='horizontal',
											length=320)
		self.deslizableAreaMin.pack()
		self.areaMin.set(100)
		
		self.deslizableAreaMax = Scale(frame, label = 'Area Maxima ',
											variable=self.areaMax,
											from_=0, to=3500,
											tickinterval=500,
											resolution=20,
											orient='horizontal',
											length=320)
		self.deslizableAreaMax.pack()
		self.areaMax.set(1000)
		
		
	def creaDeslizablesCirculo(self, frame):
		self.toleranciaWH = DoubleVar()
		self.desviacionD = DoubleVar()
		self.toleranciaLP = DoubleVar()
		self.deslizableToleranciaWH = Scale(frame, label = 'toleranciaWH ',
											variable=self.toleranciaWH,
											from_=0, to=1,
											resolution=0.05,
											orient='horizontal',
											length=320)
		self.deslizableToleranciaWH.pack()
		self.toleranciaWH.set(0.15)
		
		self.deslizableDesviacionD = Scale(frame, label = 'desviacionD ',
											variable=self.desviacionD,
											from_=0, to=1,
											resolution=0.05,
											orient='horizontal',
											length=320)
		self.deslizableDesviacionD.pack()
		self.desviacionD.set(0.25)
	
		self.deslizableToleranciaLP = Scale(frame, label = 'toleranciaLP ',
											variable=self.toleranciaLP,
											from_=0, to=1,
											resolution=0.05,
											orient='horizontal',
											length=320)
		self.deslizableToleranciaLP.pack()
		self.toleranciaLP.set(0.15)
		
	def creaSelectorVisualizacion(self, frame):
		self.tipoVisualizacion = StringVar()
		self.selectorVisualizacionNada = Radiobutton(frame, 
												 text= 'Ver Nada',
												 variable=self.tipoVisualizacion,
												 value='nada')
		self.selectorVisualizacionNada.pack(anchor=NW) 
		self.selectorVisualizacionBlobs = Radiobutton(frame, 
												 text= 'Ver blobs',
												 variable=self.tipoVisualizacion,
												 value='blobs')
		self.selectorVisualizacionBlobs.pack(anchor=NW) 
		self.selectorVisualizacionEstructura = Radiobutton(frame, 
												 text= 'Ver Estructura',
												 variable=self.tipoVisualizacion,
												 value='estructura')
		self.selectorVisualizacionEstructura.pack(anchor=NW)                                         
		self.tipoVisualizacion.set('blobs')
	
	def creaVisorMensajes(self, frame):
		self.mensaje = Tkinter.Message(frame)
		self.mensaje.config(font=('times', 11, 'italic'))
		self.mensaje.pack(side=LEFT)
		
	
		
	def iniciaAjustesyVisoresImagenes(self):
		
		self.actualizaAjustes()
		
	# ------------------------------------------------------------------
	# Ejecucion en ciclica de las siguientes funciones
	
	# actualizaAjustes ->
	# actualizaVisorImagenOriginal ->
	# actualizaVisorImagenTratada ->
	# actualizaVisorImagenBlobs ->
	# actualizaAjustes -> etc ...
	# ------------------------------------------------------------------
	
	def actualizaAjustes(self):
		
		self.tiempoInicial = time.time()
		self.imagenTratada.ajustes.actualizaAjustes(self.nivelR.get(),
									  self.nivelG.get() , 
									  self.nivelB.get(), 
									  self.nivelBinarizado.get(), 
									  self.areaMin.get(), 
									  self.areaMax.get(), 
									  self.toleranciaWH.get(), 
									  self.desviacionD.get(),
									  self.toleranciaLP.get() )
							 
		self.actualizaVisorImagenOriginal()
			
	def actualizaVisorImagenOriginal(self):
		img = self.imagenTratada.capturaImagen()
		photo = ImageTk.PhotoImage(img.getPIL())
		self.visorImagenOriginal.photo = photo
		self.visorImagenOriginal.configure(image=photo)
		self.visorImagenOriginal.after(10, self.actualizaVisorImagenTratada)
		
	def actualizaVisorImagenTratada(self):
		img = self.imagenTratada.capturaYTrataLaImagen()
		photo = ImageTk.PhotoImage(img.getPIL())
		self.visorImagenTratada.photo = photo
		self.visorImagenTratada.configure(image=photo)
		self.visorImagenTratada.after(10, self.actualizaVisorImagenBlobs)
		
	def actualizaVisorImagenBlobs(self):
	  
		## print self.toleranciaWH.get(), self.desviacionD.get(), self.toleranciaLP.get()                    
		img = self.imagenTratada.encuentraYFiltraBlobs(self.tipoVisualizacion.get())
		photo = ImageTk.PhotoImage(img.getPIL())
		self.visorImagenBlobs.photo = photo
		self.visorImagenBlobs.configure(image=photo)
		self.tiempoFinal = time.time()
		self.tiempoDeEjecucion = self.tiempoFinal - self.tiempoInicial
		#print (self.tiempoDeEjecucion)
		self.visorImagenBlobs.after(10, self.actualizaVisorMensajes())
		
	def actualizaVisorMensajes(self):
		texto = "Tiempo de procesado {0:0.2f} seg ".format(self.tiempoDeEjecucion)
		self.mensaje.config(text=texto)
		self.actualizaAjustes()
		
	# ------------------------------------------------------------------
	# Fin de un ciclo de ejecucion
	# ------------------------------------------------------------------
		
	def ponerSeparadores(self, frame, num):
		for i in range(num):
			Label(frame, text = "                             ").pack(side=TOP, 
																	  expand=YES, 
																	  fill=X)
class GUI(Frame):
	def __init__(self, parent=None):
		Frame.__init__(self, parent)
		self.pack(expand=YES, fill=BOTH)
		self.movimientoLibre = False
		self.tiempoInicial = 0
		self.tiempoFinal = 0
		self.tiempoDeTratamientoImagen = 0
		self.enMovimiento = False
		self.tiempoInicioMovimiento = 0
		self.angulosActuales = []
		self.angulosAnteriores = []
		self.diferenciaAngulos = [0,0,0]
		self.imagenTratada = ImagenTratada()
		self.acciones = Acciones()
		self.creaElementos()
		self.inicioCicloEjecucion()
		self.master.title('Control Experimental Brazo Robotico')
		self.master.iconname('Control Experimental Brazo Robotico')
		
	def creaElementos(self):
		self.creaBarraMenus()
		self.creaAreaSuperior()
		self.creaAreaInferior()
		self.creaAreaIntermedia()
		
		
	def creaAreaSuperior(self):
		self.areaSuperior = Frame(self, cursor='hand2', relief=SUNKEN, bd=2)
		self.areaSuperior.pack(side=TOP, fill=X)	
		self.creaAreaVisorImagen(self.areaSuperior)
		self.creaAreaVisorAngulos(self.areaSuperior)
		
	def creaAreaIntermedia(self):
		self.areaIntermedia = Frame(self, cursor='hand2', 
									relief=SUNKEN, bd=2)
		self.areaIntermedia.pack(side=BOTTOM, fill=X, anchor=N)		
		self.creaAreaControlesAproximados(self.areaIntermedia)
		self.creaAreaControlesExactos(self.areaIntermedia)
		
	def creaAreaInferior(self):	
		self.areaInferior = Frame(self, cursor='hand2', relief=SUNKEN, bd=2)
		self.areaInferior.pack(side=BOTTOM, fill=X)	
		self.creaAreaStop(self.areaInferior)
			
	def creaBarraMenus(self):
		self.menubar = Menu(self.master)
		self.master.config(menu=self.menubar)
		self.menuAjustes()
		self.menuBrazo()
		
	def menuAjustes(self):
		miniMenu = Menu(self.menubar)
		miniMenu.add_command(label='Cargar Ajustes...', command=self.cargaAjustes)
		miniMenu.add_command(label='Salir...', command=self.quit)
		self.menubar.add_cascade(label='Ajustes', underline=0, menu=miniMenu)
		
	def menuBrazo(self):
		miniMenu = Menu(self.menubar)
		miniMenu.add_command(label='Mover solo si se ven los marcadores', command=lambda:self.hacerMovimientoLibre(False))
		miniMenu.add_command(label='Mover siempre', command=lambda:self.hacerMovimientoLibre(True))
		self.menubar.add_cascade(label='Brazo', underline=0, menu=miniMenu)
			
	def hacerMovimientoLibre(self, decision):
		if decision == True:
			self.movimientoLibre = True
		else:
			self.movimientoLibre = False
			
	def cargaAjustes(self):	
		archivo = askopenfilename(initialdir='/imagen/MisAjustes')
		self.imagenTratada.cargaAjustes(archivo)
					
	def aunPorHacer(self):
		print "Funcion aun por implementar"
		
	def quit(self):
		if askyesno('Verificacion de Salida', 'Estas seguro de querer salir?'):
			Frame.quit(self)
			
	def creaAreaVisorImagen(self,frame):
		self.areaVisorImagen = Frame(frame, cursor='hand2', relief=SUNKEN, bd=2)
		self.areaVisorImagen.pack(side=LEFT, fill=X)
		self.creaVisorImagen(self.areaVisorImagen )
			
	def creaVisorImagen(self, frame):
		self.visorImagen = Label(frame, text='Area visor Imagen')
		self.visorImagen.pack(side=LEFT, fill=X)
		
	def creaAreaVisorAngulos(self,frame):
		self.areaVisorAngulosActuales = Frame(frame, cursor='hand2', relief=SUNKEN, bd=2)
		self.areaVisorAngulosActuales.pack(side=TOP, fill=X)
		self.creaVisoresAngulosActuales(self.areaVisorAngulosActuales )
		
		self.ponerSeparadores( frame, 1)
		
		self.areaVisorAngulosAnteriores = Frame(frame, cursor='hand2', relief=SUNKEN, bd=2)
		self.areaVisorAngulosAnteriores.pack(side=TOP, fill=X)
		self.creaVisoresAngulosAnteriores(self.areaVisorAngulosAnteriores )
		
		self.ponerSeparadores( frame, 1)
		
		self.areaVisorAngulosDiferencia = Frame(frame, cursor='hand2', relief=SUNKEN, bd=2)
		self.areaVisorAngulosDiferencia.pack(side=TOP, fill=X)
		self.creaVisoresAngulosDiferencia(self.areaVisorAngulosDiferencia )
			
			
	def creaVisoresAngulosActuales(self, frame):
		self.visorAngulosActuales = []
		self.creaVisorAngulosGenerico(self.visorAngulosActuales, 'Angulos Actuales', frame)
			
	def creaVisoresAngulosAnteriores(self, frame):
		self.visorAngulosAnteriores = []
		self.creaVisorAngulosGenerico(self.visorAngulosAnteriores,'Angulos Anteriores', frame)
			
	def creaVisoresAngulosDiferencia(self, frame):
		self.visorAngulosDiferencia = []
		self.creaVisorAngulosGenerico(self.visorAngulosDiferencia, 'Diferencia Angulos', frame)
			
	def creaVisorAngulosGenerico(self, visorAngulos,texto, frame):
		for i in range(3):
			visor = Tkinter.Message(frame)
			visor.config(font=('times', 8), width = 70, text = texto)
			visor.pack(side=LEFT, fill=X, expand=YES)
			visorAngulos.append(visor)
			
	def creaAreaControlesAproximados(self,frame):
		self.areaControlesAproximados = Frame(frame, cursor='hand2', relief=SUNKEN, bd=2)
		self.areaControlesAproximados.pack(side=LEFT, fill=X)
		self.creaControlesAproximados(self.areaControlesAproximados)
		
	def creaControlesAproximados(self, frame):
		#Empiezo colocando cosas por la parte de abajo del frame 
		# para que el pack() no me de problemas
		areaAux = Frame(frame, cursor='hand2', bd=2)
		areaAux.pack(side=BOTTOM, fill=X)	
		self.ponerSeparadores(areaAux, 1)
		Button(areaAux, text = ' - ',command=lambda:self.mueveBase('izq')).pack(side=LEFT)
		Label(areaAux, text='Base ' ).pack(side=LEFT)
		Button(areaAux, text = ' + ',command=lambda:self.mueveBase('der')).pack(side=LEFT)
		Label(areaAux, text='  ').pack(side=LEFT)
		Button(areaAux, text = ' - ',command=lambda:self.muevePinza('cerrar')).pack(side=LEFT)
		Label(areaAux, text='Pinza ' ).pack(side=LEFT)
		Button(areaAux, text = ' + ',command=lambda:self.muevePinza('abrir')).pack(side=LEFT)
		Label(areaAux, text='  ').pack(side=LEFT)
		Button(areaAux, text = ' - ',command=lambda:self.luz('apagar')).pack(side=LEFT)
		Label(areaAux, text='Luz ' ).pack(side=LEFT)
		Button(areaAux, text = ' + ',command=lambda:self.luz('encender')).pack(side=LEFT)
		Label(areaAux, text='  ').pack(side=LEFT)
		
		self.tiempoMovimiento = DoubleVar()
		self.deslizableTiempo = Scale(frame, label = 'tiempo de movimiento ',
											variable=self.tiempoMovimiento,
											from_=0, to=2,
											tickinterval=0.25,
											resolution=0.05,
											orient='horizontal',
											length=320)
		self.deslizableTiempo.pack(side=TOP, fill=X)
		self.tiempoMovimiento.set(0.5)
		
		self.ponerSeparadores(frame, 1)
		self.ponerBotonesAngulo(frame,1)
		self.ponerBotonesAngulo(frame,2)
		self.ponerBotonesAngulo(frame,3)
			
	def ponerBotonesAngulo(self,frame, numAngulo):
		Button(frame, text = ' - ',command=lambda:self.disminuyeAngulo(numAngulo)).pack(side=LEFT)
		Label(frame, text='Angulo ' + str(numAngulo)).pack(side=LEFT)
		Button(frame, text = ' + ',command=lambda:self.aumentaAngulo(numAngulo)).pack(side=LEFT)
		Label(frame, text='  ').pack(side=LEFT)
		
	def iniciarMovimiento(self):
		""" Solo inicia el movimieno si tiene una lista de angulos actuales buena 
		Devuelve True si ha podido iniciar el movimiento y false en caso contrario"""
		if self.movimientoLibre :
			return True
			
		if self.angulosActuales == [] :
			print("No se puede iniciar el movimiento al no disponer de los angulos iniciales")
			return False
		else:
			self.enMovimiento = True
			self.tiempoInicioMovimiento = time.time()
			self.angulosAnteriores = self.angulosActuales[:] # Copia una lista en otra
			return True
		
	def finalizarMovimiento(self):
		if self.movimientoLibre :
			return True
			
		self.enMovimiento = False
		for i in range(3):
			self.diferenciaAngulos[i] = abs(self.angulosAnteriores[i] - self.angulosActuales[i])
		
		
	def aumentaAngulo(self, numAngulo):
		if self.iniciarMovimiento():
			print("Aumentando angulo {} con un tiempo {}".format(numAngulo, self.tiempoMovimiento.get()))	
			self.acciones.tiempo = self.tiempoMovimiento.get()	
			if numAngulo == 3:
				self.acciones.actuar('subir-hombro')
			elif numAngulo == 2:
				self.acciones.actuar('subir-codo')
			elif numAngulo == 1:
				self.acciones.actuar('subir-munneca')
			else:
				pass
			
	def mueveBase(self, comando):
		if self.iniciarMovimiento():
			self.acciones.tiempo = self.tiempoMovimiento.get()
			if comando == 'izq':
				self.acciones.actuar('base-izquierda')
			elif comando == 'der':
				self.acciones.actuar('base-derecha')
			else:
				pass
			
	def muevePinza(self, comando):
		if self.iniciarMovimiento():
			self.acciones.tiempo = self.tiempoMovimiento.get()
			if comando == 'abrir':
				self.acciones.actuar('abrir-pinza')
			elif comando == 'cerrar':
				self.acciones.actuar('cerrar-pinza')
			else:
				pass
			
	def luz(self, comando):
		if self.iniciarMovimiento():
			self.acciones.tiempo = self.tiempoMovimiento.get()
			if comando == 'encender':
				self.acciones.actuar('encender-luz')
			elif comando == 'apagar':
				self.acciones.actuar('apagar-luz')
			else:
				pass
			
		
	def disminuyeAngulo(self, numAngulo):
		if self.iniciarMovimiento():
			print("Disminuyendo angulo {} con un tiempo {}".format(numAngulo, self.tiempoMovimiento.get()))
			self.acciones.tiempo = self.tiempoMovimiento.get()	
			if numAngulo == 3:
				self.acciones.actuar('bajar-hombro')
			elif numAngulo == 2:
				self.acciones.actuar('bajar-codo')
			elif numAngulo == 1:
				self.acciones.actuar('bajar-munneca')
			else:
				pass
			
	def creaAreaControlesExactos(self,frame):
		self.areaControlesExactos = Frame(frame, cursor='hand2', relief=SUNKEN, bd=2)
		self.areaControlesExactos.pack(side=LEFT, fill=X)
		self.creaControlesExactos(self.areaControlesExactos)
	
	def creaControlesExactos(self, frame):
		self.areaAngulo1 = Frame(frame, cursor='hand2', relief=SUNKEN, bd=2)
		self.areaAngulo1.pack(side=TOP, fill=X)
		self.creaControlAngulo1(self.areaAngulo1 )
		
		self.ponerSeparadores( frame, 1)
		
		self.areaAngulo2 = Frame(frame, cursor='hand2', relief=SUNKEN, bd=2)
		self.areaAngulo2.pack(side=TOP, fill=X)
		self.creaControlAngulo2(self.areaAngulo2 )
		
		self.ponerSeparadores( frame, 1)
		
		self.areaAngulo3 = Frame(frame, cursor='hand2', relief=SUNKEN, bd=2)
		self.areaAngulo3.pack(side=TOP, fill=X)
		self.creaControlAngulo3(self.areaAngulo3 )
		
			
	def creaControlAngulo1(self, frame):
		control1 = Label(frame, text='Angulo1')
		control1.pack(side=LEFT, fill=X, expand=YES)
		self.entradaAngulo1 = Entry(frame)
		self.entradaAngulo1.pack(side=LEFT)
		self.entradaAngulo1.bind('<Return>', (lambda event: self.imprimeEntradas()))
		
	def creaControlAngulo2(self, frame):
		control2 = Label(frame, text='Angulo2')
		control2.pack(side=LEFT, fill=X, expand=YES)
		self.entradaAngulo2 = Entry(frame)
		self.entradaAngulo2.pack(side=LEFT)
		self.entradaAngulo2.bind('<Return>', (lambda event: self.imprimeEntradas()))
		
	def creaControlAngulo3(self, frame):
		control3 = Label(frame, text='Angulo3')
		control3.pack(side=LEFT, fill=X, expand=YES)
		self.entradaAngulo3 = Entry(frame)
		self.entradaAngulo3.pack(side=LEFT)
		self.entradaAngulo3.bind('<Return>', (lambda event: self.imprimeEntradas()))
		
	def imprimeEntradas(self):
		print(self.entradaAngulo1.get())
		print(self.entradaAngulo2.get())
		print(self.entradaAngulo3.get())
		print("")
			
		
	def creaAreaStop(self,frame):
		self.areaAreaStop = Frame(frame, cursor='hand2', relief=SUNKEN, bd=2)
		self.areaAreaStop.pack(side=BOTTOM, fill=X)
		self.creaControlStop(self.areaAreaStop)
		
	def creaControlStop(self, frame):
		self.controlStop = Button(frame, text='Parar', command=self.acciones.actuar('parar'))
		self.controlStop.pack(side=RIGHT)
		texto = "Tiempo tratamiento: {} " .format(self.tiempoDeTratamientoImagen)
		self.etiquetaTiempo = Label(frame, text =texto) 
		self.etiquetaTiempo.pack(side = LEFT)
		
	
	def inicioCicloEjecucion(self):
		self.actualizaVisorImagen()
		
	# ------------------------------------------------------------------
	# Ejecucion en ciclica de las siguientes funciones
	
	# actualizaVisorImagen ->
	# actualizaVisorAngulos ->
	
	# actualizaVisorImagen ->
	# actualizaVisorAngulos ->
	# etc ...
	# ------------------------------------------------------------------
	
	
	def actualizaVisorImagen(self):
		self.tiempoInicial = time.time()
		
		img , self.angulosActuales = self.imagenTratada.capturaTrataYFiltraBlobsDeImagen()
												  
		photo = ImageTk.PhotoImage(img.getPIL())
		self.visorImagen.photo = photo
		self.visorImagen.configure(image=photo)
		self.visorImagen.after(10, self.actualizaVisorAngulos)
		
	
		
	def actualizaVisorAngulos(self):
		actualizarAnterioresYDiferencias = False
		if self.enMovimiento:
					tiempoEnMovimiento =  time.time() - self.tiempoInicioMovimiento
					print("Tiempo en movimiento: {}".format(tiempoEnMovimiento))
					if tiempoEnMovimiento > self.acciones.tiempo + 2*self.tiempoDeTratamientoImagen:
						if self.angulosActuales != []:
							self.finalizarMovimiento()
							actualizarAnterioresYDiferencias = True
							print("")
						
		if self.angulosActuales == []:
			for i in range(3):
				texto = "Angulo Actual {0}: --- grados ".format(str(i+1))
				self.visorAngulosActuales[i].config(text=texto)
		else:
			for i, angulo in enumerate(self.angulosActuales):
				texto = "Angulo Actual {0}: {1:0.1f} grados ".format(str(i+1), angulo)
				self.visorAngulosActuales[i].config(text=texto)
				if actualizarAnterioresYDiferencias:
					texto = "Angulo Anterior {0}: {1:0.1f} grados ".format(str(i+1), self.angulosAnteriores[i])
					self.visorAngulosAnteriores[i].config(text=texto)
					texto = "Diferencia Angulos {0}: {1:0.1f} grados ".format(str(i+1), self.diferenciaAngulos[i])
					self.visorAngulosDiferencia[i].config(text=texto)
					
		self.tiempoFinal = time.time()
		self.tiempoDeTratamientoImagen = self.tiempoFinal - self.tiempoInicial
		#print (self.tiempoDeTratamientoImagen)
		texto = "Tiempo tratamiento: {0:0.2f} segundos " .format(self.tiempoDeTratamientoImagen)
		self.etiquetaTiempo.config(text =texto) 
				
		self.actualizaVisorImagen()
		

		
	# ------------------------------------------------------------------
	# Fin de un ciclo de ejecucion
	# ------------------------------------------------------------------
		
	def ponerSeparadores(self, frame, num):
		for i in range(num):
			Label(frame, text = "                             ").pack(side=TOP, 
																	  expand=YES, 
																	  fill=X)