Esempio n. 1
0
class VistaPolinomio(tk.Frame):
    def __init__(self, padre, controlador):
        self.polinomioAnterior = None
        self.controlador = controlador

        tk.Frame.__init__(self, padre)
        self.vista = self.configurarVista()

    def configurarVista(self):
        self.scrollPrincipal = VerticalScrolledFrame(parent=self, alto=480)
        self.scrollPrincipal.pack()
        self.scrollPrincipal.config(bg=COLOR_PRINCIPAL)
        self.scrollPrincipal.interior.config(bg=COLOR_PRINCIPAL)

        Label(self.scrollPrincipal.interior,
              text="Polinomio interpolante",
              bg=COLOR_PRINCIPAL,
              pady=5,
              font=FONT_TITULO).pack()
        self.config(bg=COLOR_PRINCIPAL)

        Label(self.scrollPrincipal.interior,
              text="",
              bg=COLOR_PRINCIPAL,
              font=FONT_PRINCIPAL).pack()  # Espacio, se me bugueo el grid

        self.lPolinomio = Label(self.scrollPrincipal.interior,
                                text="",
                                bg=COLOR_PRINCIPAL,
                                font=FONT_PRINCIPAL,
                                wraplength=800)
        self.lPolinomio.pack()  #modifique arriba

        # Frame datos
        self.frameDatos = Frame(self.scrollPrincipal.interior,
                                bg=COLOR_PRINCIPAL)
        self.frameDatos.pack()

        self.lMetodo = Label(self.frameDatos,
                             text="",
                             bg=COLOR_PRINCIPAL,
                             font=FONT_PRINCIPAL)
        self.lMetodo.grid(row=0, column=0)
        self.lGrado = Label(self.frameDatos,
                            text="",
                            bg=COLOR_PRINCIPAL,
                            font=FONT_PRINCIPAL)
        self.lGrado.grid(row=1, column=0)
        self.lEspaciado = Label(self.frameDatos,
                                text="",
                                bg=COLOR_PRINCIPAL,
                                font=FONT_PRINCIPAL)
        self.lEspaciado.grid(row=2, column=0)

        Label(self.scrollPrincipal.interior,
              text="",
              bg=COLOR_PRINCIPAL,
              font=FONT_PRINCIPAL).pack()  # Espacio, se me bugueo el grid

        # Frame pasos
        self.framePasos = LabelFrame(self.scrollPrincipal.interior,
                                     text='Pasos:',
                                     bg=COLOR_SECUNDARIO,
                                     font=FONT_PRINCIPAL_BOLD)
        self.framePasos.pack()
        self.labelsPasos = []
        self.scroll = VerticalScrolledFrame(parent=self.framePasos, alto=200)
        self.scroll.pack()
        self.scroll.interior.config(bg=COLOR_SECUNDARIO)

        Label(self.scrollPrincipal.interior,
              text="",
              bg=COLOR_PRINCIPAL,
              font=FONT_PRINCIPAL,
              wraplength=800).pack()  # Espacio, se me bugueo el grid

        # Frame calcular en punto
        self.framePunto = LabelFrame(self.scrollPrincipal.interior,
                                     text='Especializar en valor',
                                     bg=COLOR_SECUNDARIO,
                                     bd=0,
                                     font=FONT_PRINCIPAL_BOLD,
                                     padx=5)
        self.framePunto.pack()
        Label(self.framePunto,
              text="Punto: ",
              bg=COLOR_SECUNDARIO,
              font=FONT_PRINCIPAL).grid(row=0, column=0)
        self.punto = Entry(self.framePunto)
        self.punto.grid(row=0, column=1, padx=5)
        self.boton = Button(
            self.framePunto,
            text="Calcular",
            bd=1,
            bg="springGreen2",
            activebackground="springGreen3",
            command=lambda: self.calcularImagen(self.punto.get()))
        self.boton.grid(row=0, column=2)
        self.lImagen = Label(self.framePunto,
                             text="Imagen: ",
                             bg=COLOR_SECUNDARIO,
                             font=FONT_PRINCIPAL)
        self.lImagen.grid(row=1, column=0)
        self.mensajePunto = Label(self.framePunto,
                                  text="",
                                  bg=COLOR_SECUNDARIO,
                                  fg=COLOR_ERROR)
        self.mensajePunto.grid(row=2, column=0,
                               columnspan=3)  # Espacio, se me bugueo el grid

        Label(self.scrollPrincipal.interior,
              text="",
              bg=COLOR_PRINCIPAL,
              font=FONT_PRINCIPAL).pack()  # Espacio, se me bugueo el grid

        # Frame botones
        self.frameBotones = Frame(self.scrollPrincipal.interior,
                                  bg=COLOR_PRINCIPAL)
        self.frameBotones.pack()

        self.boton = Button(
            self.frameBotones,
            text="Alterar valores",
            bd=1,
            bg="firebrick2",
            activebackground="firebrick3",
            command=lambda: self.controlador.mostrarFrame(VistaInicial))
        self.boton.grid(row=0, column=0, padx=10)

        self.boton = Button(self.frameBotones,
                            text="Finalizar",
                            bd=1,
                            bg="firebrick2",
                            activebackground="firebrick3",
                            command=self.controlador.destroy)
        self.boton.grid(row=0, column=1)

        self.lCambio = Label(self.scrollPrincipal.interior,
                             text="",
                             bg=COLOR_PRINCIPAL,
                             font=FONT_PRINCIPAL)
        self.lCambio.pack()
        return self.scrollPrincipal

    def cargarResultados(self, padre):
        self.vista.destroy()
        self.vista = self.configurarVista()

        self.padre = padre
        self.lMetodo['text'] = "Metodo: " + padre.metodoElegido

        self.modelController = MetodoController()
        self.modelController.cargar(padre.getDominios(), padre.getImagenes(),
                                    padre.metodoElegido)

        self.lPolinomio['text'] = self.modelController.obtenerPolinomio()
        if self.polinomioAnterior is not None:
            if self.cambioPolinomio():
                self.lCambio['text'] = "Cambio: Si"
            else:
                self.lCambio['text'] = "Cambio: No"
        self.polinomioAnterior = self.lPolinomio['text']

        self.lGrado['text'] = "Grado: " + self.modelController.obtenerGrado(
        ).__str__()
        self.lEspaciado[
            'text'] = "Equiespaciado: " + self.modelController.esEquiespaciado(
            )

        self.cargarPasos()

    def cambioPolinomio(self):
        return self.lPolinomio['text'] != self.polinomioAnterior

    def limpiarPasos(self):
        for paso in self.labelsPasos:
            paso.destroy()

    def cargarPasos(self):
        self.limpiarPasos()

        pasos = self.modelController.obtenerPasos()
        for i, p in enumerate(pasos):
            paso = Label(self.scroll.interior,
                         text=p,
                         bg=COLOR_SECUNDARIO,
                         font=FONT_PRINCIPAL,
                         wraplength=800)
            paso.pack()
            self.labelsPasos.append(paso)

    def calcularImagen(self, punto):
        self.mensajePunto['text'] = ""

        if esDigito(self.punto.get()):
            self.lImagen['text'] = self.modelController.obtenerImagen(punto)
        else:
            self.mensajePunto['text'] = "Ingrese un valor numerico"