#importacion de bibliotecas

from tkinter import *
import math
import tkinter as tk

#crear ventana
class MyVentana(Frame):

    def __init__(self, master=None):
        super().__init__(master)

        self.master=master
        self.master.title("Calculadora")
        self.master.iconbitmap("calculadora.ico")
        self.master.resizable(False,False)
        self.iniciar()

#///////////////////////////////////////////////// Cimponentes //////////////////////////////////////////////////////////////////////////////////////////

#CREAR MODO BASICO"

    def iniciar(self):

        # clear contenedores
        self.contenedormodNor=tk.Frame(master=self.master,width=300, height=390, bg='gray7')

        # posisionar contenedores
        self.contenedormodNor.pack(fill=tk.Y, side=tk.LEFT)

# crear elementos

        #la caja de texto
        self.pantallaNor=Text(self.contenedormodNor, state="disabled", width=10, height=3, background="gray9", foreground="DeepSkyBlue2", font=("Helvetica", 45))
        #posisionar
        self.pantallaNor.grid(row=0, column=0, columnspan=5, padx=5, pady=5)

        #botones normal

        self.bmenu=tk.Button(self.contenedormodNor, width=5, height=2, text="\u2630", bg='RoyalBlue4',font=("Helvetica", 15), command = lambda: self.craravans() ).grid(row=1, column=0, padx=0, pady=1)
        self.bc=tk.Button(self.contenedormodNor, width=5, height=2, text="C", bg='RoyalBlue4', font=("Helvetica", 15), command = lambda: self.borrar() ).grid(row=1, column=4,padx=0, pady=1)



#fila 2
        self.b1 = tk.Button(self.contenedormodNor, width=5, height=2, text="1", bg='DeepSkyBlue4', font=("Helvetica", 15), command = lambda: self.click_boton(1) ).grid(row=3,column=0,padx=0,pady=1)
        self.b2 = tk.Button(self.contenedormodNor, width=5, height=2, text="2", bg='DeepSkyBlue4', font=("Helvetica", 15), command = lambda: self.click_boton(2) ).grid(row=3,column=1,padx=0,pady=1)
        self.b3 = tk.Button(self.contenedormodNor, width=5, height=2, text="3", bg='DeepSkyBlue4', font=("Helvetica", 15), command = lambda: self.click_boton(3) ).grid(row=3, column=2,padx=0, pady=1)
        self.bdiv = tk.Button(self.contenedormodNor, width=5, height=2, text="/", bg='DeepSkyBlue2', font=("Helvetica", 15), command = lambda: self.click_boton("/") ).grid(row=3, column=3,padx=0, pady=1)
        self.bpot = tk.Button(self.contenedormodNor, width=5, height=2, text="\u221A", bg='DeepSkyBlue2', font=("Helvetica", 15), command = lambda: self.raiz() ).grid(row=3, column=4,padx=0, pady=1)

#fila 3
        self.b4 = tk.Button(self.contenedormodNor, width=5, height=2, text="4", bg='DeepSkyBlue4', font=("Helvetica", 15), command = lambda: self.click_boton(4) ).grid(row=4,column=0,padx=0,pady=1)
        self.b5 = tk.Button(self.contenedormodNor, width=5, height=2, text="5", bg='DeepSkyBlue4', font=("Helvetica", 15), command = lambda: self.click_boton(5) ).grid(row=4,column=1,padx=0,pady=1)
        self.b6 = tk.Button(self.contenedormodNor, width=5, height=2, text="6", bg='DeepSkyBlue4', font=("Helvetica", 15), command = lambda: self.click_boton(6) ).grid(row=4, column=2,padx=0, pady=1)
        self.bmul= tk.Button(self.contenedormodNor, width=5, height=2, text="*", bg='DeepSkyBlue2', font=("Helvetica", 15), command = lambda: self.click_boton("*") ).grid(row=4, column=3,padx=0, pady=1)
        self.braiz = tk.Button(self.contenedormodNor, width=5, height=2, text="(", bg='DeepSkyBlue2', font=("Helvetica", 15), command = lambda: self.click_boton("(") ).grid(row=4, column=4,padx=0, pady=1)


#fila 4
        self.b7 = tk.Button(self.contenedormodNor, width=5, height=2, text="7", bg='DeepSkyBlue4', font=("Helvetica", 15), command = lambda: self.click_boton(7) ).grid(row=5,column=0,padx=0,pady=1)
        self.b8 = tk.Button(self.contenedormodNor, width=5, height=2, text="8", bg='DeepSkyBlue4', font=("Helvetica", 15), command = lambda: self.click_boton(8) ).grid(row=5,column=1,padx=0,pady=1)
        self.b9 = tk.Button(self.contenedormodNor, width=5, height=2, text="9", bg='DeepSkyBlue4', font=("Helvetica", 15), command = lambda: self.click_boton(9) ).grid(row=5, column=2,padx=0, pady=1)
        self.bres = tk.Button(self.contenedormodNor, width=5, height=2, text="-", bg='DeepSkyBlue2', font=("Helvetica", 15), command = lambda: self.click_boton("-") ).grid(row=5, column=3,padx=0, pady=1)
        self.bsigno = tk.Button(self.contenedormodNor, width=5, height=2, text=")", bg='DeepSkyBlue2', font=("Helvetica", 15), command = lambda: self.click_boton(")") ).grid(row=5, column=4,padx=0, pady=1)

#fila 5
        self.b0 = tk.Button(self.contenedormodNor, width=11, height=2, text="0", bg='DeepSkyBlue4', font=("Helvetica", 15), command = lambda: self.click_boton(0) ).grid(row=6,column=0,columnspan=2,padx=0,pady=1)
        self.bpun = tk.Button(self.contenedormodNor, width=5, height=2, text=".", bg='DeepSkyBlue2', font=("Helvetica", 15), command = lambda: self.click_boton(".") ).grid(row=6, column=2,padx=0, pady=1)
        self.bsum = tk.Button(self.contenedormodNor, width=5, height=2, text="+", bg='DeepSkyBlue2', font=("Helvetica", 15), command = lambda: self.click_boton("+") ).grid(row=6, column=3,padx=0, pady=1)
        self.bigual = tk.Button(self.contenedormodNor, width=5, height=2, text="=", bg='DeepSkyBlue2', font=("Helvetica", 15), command = lambda: self.operacion() ).grid(row=6, column=4,padx=0, pady=1)



# CREAR MODO AVANZADO

    def craravans(self):
        global x
        x+=1

        if(x==1):

           #crear si si existe
           self.contenedormodAbn = tk.Frame(master=self.master, width=280, height=390, bg='gray9')
           self.contenedormodAbn.pack(fill=tk.Y, side=tk.LEFT)

           # la caja de texto para el ID 70164163

           self.idestudiante = Text(self.contenedormodAbn, state="disabled", width=13, height=1, background="gray9",foreground="SlateBlue2", font=("Helvetica", 12, "bold"))

           # posisionar
           self.idestudiante.grid(row=0, column=0, columnspan=5, padx=5, pady=5)
           # Escrivir id
           self.idestudiante.configure(state="normal")
           self.idestudiante.insert("1.0", "RUCHIMISOFTH")
           self.idestudiante.configure(state="disabled")

            # fila 1 funciones
           self.bed = tk.Button(self.contenedormodAbn, width=6, height=2, text="x^y", bg='DeepSkyBlue4', font=("Helvetica", 15),command=lambda: self.click_boton("**")).grid(row=1, column=0, padx=0, pady=1)
           self.bpi = tk.Button(self.contenedormodAbn, width=6, height=2, text="Pi", bg='DeepSkyBlue4',font=("Helvetica", 15), command=lambda: self.pisi()).grid(row=1, column=1, padx=0,pady=1)
           self.bsin = tk.Button(self.contenedormodAbn, width=6, height=2, text="sin", bg='DeepSkyBlue4',font=("Helvetica", 15), command=lambda: self.seno()).grid(row=1, column=2, padx=0,pady=1)
           self.btan = tk.Button(self.contenedormodAbn, width=6, height=2, text="tan", bg='DeepSkyBlue4',font=("Helvetica", 15), command=lambda: self.tange()).grid(row=1, column=3, padx=0,pady=1)
           self.bne = tk.Button(self.contenedormodAbn, width=6, height=2, text="n!", bg='DeepSkyBlue4',font=("Helvetica", 15), command=lambda: self.facto()).grid(row=1, column=4, padx=0,pady=1)


                        
           # fila 2 funciones
           self.bex=tk.Button(self.contenedormodAbn, width=6, height=2, text="n_n", bg='RoyalBlue4', font=("Helvetica", 15)).grid(row=2, column=1, padx=0, pady=1)
           self.bohis = tk.Button(self.contenedormodAbn, width=6, height=2, text="BH", bg='RoyalBlue4',font=("Helvetica", 15), command=lambda: self.boristo()).grid(row=2, column=2,padx=0, pady=1)
           self.bfrac = tk.Button(self.contenedormodAbn, width=6, height=2, text="Frac", bg='RoyalBlue4',font=("Helvetica", 15), command=lambda: self.desi()).grid(row=2, column=3, padx=0,pady=1)

           # la caja de texto para el historial
           self.historial = Text(self.contenedormodAbn, state="disabled", width=30, height=10, background="gray9",foreground="DeepSkyBlue2", font=("Helvetica", 15,"bold"))
           # posisionar
           self.historial.grid(row=3, column=0, columnspan=5, padx=5, pady=5)

           # fila1Memoria
           self.bmc1 = tk.Button(self.contenedormodAbn, width=6, height=1, text="MC", bg='RoyalBlue4',font=("Helvetica", 15), command=lambda: self.memoriC()).grid(row=4, column=0, padx=1, pady=4),
           self.bmr1 = tk.Button(self.contenedormodAbn, width=6, height=1, text="MR", bg='DeepSkyBlue4',font=("Helvetica", 15), command=lambda: self.memoriR()).grid(row=4, column=1, padx=1, pady=4)
           self.bms1 = tk.Button(self.contenedormodAbn, width=6, height=1, text="MS", bg='RoyalBlue4',font=("Helvetica", 15),command=lambda: self.memoriS()).grid(row=4, column=2, padx=1, pady=4)
           self.bma1 = tk.Button(self.contenedormodAbn, width=6, height=1, text="M+", bg='DeepSkyBlue4',font=("Helvetica", 15), command=lambda: self.memorimas()).grid(row=4, column=3, padx=1, pady=4)
           self.bmm1 = tk.Button(self.contenedormodAbn, width=6, height=1, text="M-", bg='DeepSkyBlue2', font=("Helvetica", 15), command=lambda: self.memorires()).grid(row=4, column=4, padx=1, pady=4)

           # fila 2
           self.bmc = tk.Button(self.contenedormodAbn, width=6, height=1, text="MC", bg='RoyalBlue4',font=("Helvetica", 15), command=lambda:  self.memoriC2()).grid(row=5, column=0,padx=0, pady=1)
           self.bmr = tk.Button(self.contenedormodAbn, width=6, height=1, text="MR", bg='DeepSkyBlue4', font=("Helvetica", 15), command=lambda: self.memoriR2()).grid(row=5, column=1, padx=0, pady=1)
           self.bms = tk.Button(self.contenedormodAbn, width=6, height=1, text="MS", bg='RoyalBlue4',font=("Helvetica", 15), command=lambda:self.memoriS2()).grid(row=5, column=2, padx=0, pady=1)
           self.bma = tk.Button(self.contenedormodAbn, width=6, height=1, text="M+", bg='DeepSkyBlue4',font=("Helvetica", 15), command=lambda: self.memorimas2()).grid(row=5, column=3,padx=0, pady=1)
           self.bme = tk.Button(self.contenedormodAbn, width=6, height=1, text="M-", bg='DeepSkyBlue2',font=("Helvetica", 15), command=lambda: self.memorires2()).grid(row=5, column=4,padx=0, pady=1)

        elif(x==2 or x>2):

            #destruir si
            x=0
            self.contenedormodAbn.destroy()



#///////////////////////////////////////////////////         FUNCIONES BAsicas        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777



   #Escrivir en pantalla

    def click_boton(self,valor):

         global i,op

         if(op==0):
             self.pantallaNor.configure(state="normal")
             self.pantallaNor.insert(i, valor)
             self.pantallaNor.configure(state="disabled")
             i += 1.0
         else:
             i = 1.0
             self.pantallaNor.configure(state="normal")
             self.pantallaNor.delete(i, END)
             self.pantallaNor.insert(i, valor)
             self.pantallaNor.configure(state="disabled")
             i += 1.0
             op = 0
         return

    # borrar

    def borrar(self):
          global i,op
          i = 1.0
          self.pantallaNor.configure(state="normal")
          self.pantallaNor.delete(i, END)
          self.pantallaNor.configure(state="disabled")
          op=0
          return

   #borrar historial

    def boristo(self):
        global i,op

        i = 1.0
        self.pantallaNor.configure(state="normal")
        self.pantallaNor.delete(i,END)
        self.pantallaNor.configure(state="disabled")

        self.historial.configure(state="normal")
        self.historial.delete(i,END)
        self.historial.configure(state="disabled")

        op=0
        return


    def operacion(self):

        global i, resultado,ecuasion,op,x

        try:
            ecuasion=self.pantallaNor.get(1.0, END+"-1c")
            resultado=eval(ecuasion)


        except ZeroDivisionError:
            op += 1
            self.pantallaNor.configure(state="normal")
            self.pantallaNor.delete("1.0", END)
            self.pantallaNor.insert("1.0", "ERROR(/0)")
            self.pantallaNor.configure(state="disabled")

            if (x > 0):
                self.historial.configure(state="normal")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "ERROR(/0)")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", ecuasion)
                self.historial.insert("1.0", "____________")
                self.pantallaNor.configure(state="disabled")

        except SyntaxError:
            op += 1
            self.pantallaNor.configure(state="normal")
            self.pantallaNor.delete("1.0", END)
            self.pantallaNor.insert("1.0", "ERROR(Syntax)")
            self.pantallaNor.configure(state="disabled")

            if (x > 0):
                self.historial.configure(state="normal")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "ERROR(Syntax)")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", ecuasion)
                self.historial.insert("1.0", "____________")
                self.pantallaNor.configure(state="disabled")

        except SyntaxWarning:
            op += 1
            self.pantallaNor.configure(state="normal")
            self.pantallaNor.delete("1.0", END)
            self.pantallaNor.insert("1.0", "ERROR(Syntax) ")
            self.pantallaNor.configure(state="disabled")

            if (x > 0):
                self.historial.configure(state="normal")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "ERROR(Syntax)")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", ecuasion)
                self.historial.insert("1.0", "____________")
                self.pantallaNor.configure(state="disabled")

        except TypeError:
            op += 1
            self.pantallaNor.configure(state="normal")
            self.pantallaNor.delete("1.0", END)
            self.pantallaNor.insert("1.0", "ERROR(Syntax)")
            self.pantallaNor.configure(state="disabled")

            if (x > 0):
                self.historial.configure(state="normal")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "ERROR(Syntax)")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", ecuasion)
                self.historial.insert("1.0", "____________")
                self.pantallaNor.configure(state="disabled")
        else:

            self.pantallaNor.configure(state="normal")
            self.pantallaNor.delete("1.0", END)
            self.pantallaNor.insert("1.0", resultado)
            self.pantallaNor.configure(state="disabled")

            op += 1

            if (x > 0):
                self.historial.configure(state="normal")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", resultado)
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "=")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", ecuasion)
                self.historial.insert("1.0", "____________")
                self.historial.configure(state="disabled")

        return

#/////////////////////////////////////////////////////////////////FUNCIONES AVANSADAS//////////////////////////////////////////////////////////////////

    def raiz(self):

        global i, resultado, ecuasion, op, x
        try:
            ecuasion = float(self.pantallaNor.get(1.0, END + "-1c"))
            resultado =math.sqrt(ecuasion)

        except ValueError:
            op += 1
            self.pantallaNor.configure(state="normal")
            self.pantallaNor.delete("1.0", END)
            self.pantallaNor.insert("1.0", "ERROR(Syntax)")
            self.pantallaNor.configure(state="disabled")

            if (x > 0):
                self.historial.configure(state="normal")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "ERROR(Syntax)")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "Error")
                self.historial.insert("1.0", "\u221A")
                self.historial.insert("1.0", "____________")
                self.pantallaNor.configure(state="disabled")

        else:
            self.pantallaNor.configure(state="normal")
            self.pantallaNor.delete("1.0", END)
            self.pantallaNor.configure(state="disabled")

            self.pantallaNor.configure(state="normal")
            self.pantallaNor.insert("1.0", resultado)
            self.pantallaNor.configure(state="disabled")

            op += 1

            if (x > 0):
                self.historial.configure(state="normal")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", resultado)
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "=")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", ecuasion)
                self.historial.insert("1.0", "\u221A")
                self.historial.insert("1.0", "____________")
                self.historial.configure(state="disabled")

        return

    def pisi(self):

        global i, op, x,pi

        try:
             pi=math.pi

        except ValueError:
            op += 1
            self.pantallaNor.configure(state="normal")
            self.pantallaNor.delete("1.0", END)
            self.pantallaNor.insert("1.0", "ERROR(Syntax)")
            self.pantallaNor.configure(state="disabled")

            if (x > 0):
                self.historial.configure(state="normal")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "ERROR(Syntax)")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "Error")
                self.historial.insert("1.0", "Pi")
                self.historial.insert("1.0", "____________")
                self.pantallaNor.configure(state="disabled")

        else:
            self.pantallaNor.configure(state="normal")
            self.pantallaNor.delete("1.0", END)
            self.pantallaNor.insert("1.0",pi)
            self.pantallaNor.configure(state="disabled")

            op += 1

            if (x > 0):
                self.historial.configure(state="normal")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", pi)
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "=")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "Pi")
                self.historial.insert("1.0", "____________")
                self.historial.configure(state="disabled")

    def seno(self):

            global i, resultado, ecuasion, op, x,ecuasionw

            try:
                ecuasionw= float(self.pantallaNor.get(1.0, END + "-1c"))
                ecuasion=math.radians(ecuasionw)
                resultado = math.sin(ecuasion)

            except ValueError:
                op += 1
                self.pantallaNor.configure(state="normal")
                self.pantallaNor.delete("1.0", END)
                self.pantallaNor.insert("1.0", "ERROR(Syntax)")
                self.pantallaNor.configure(state="disabled")

                if (x > 0):
                    self.historial.configure(state="normal")
                    self.historial.insert("1.0", "\n")
                    self.historial.insert("1.0", "\n")
                    self.historial.insert("1.0", "ERROR(Syntax)")
                    self.historial.insert("1.0", "\n")
                    self.historial.insert("1.0", "Error")
                    self.historial.insert("1.0", "Sin")
                    self.historial.insert("1.0", "____________")
                    self.pantallaNor.configure(state="disabled")

            else:
                self.pantallaNor.configure(state="normal")
                self.pantallaNor.delete("1.0", END)
                self.pantallaNor.insert("1.0", resultado)
                self.pantallaNor.configure(state="disabled")

                op += 1

                if (x > 0):
                    self.historial.configure(state="normal")
                    self.historial.insert("1.0", "\n")
                    self.historial.insert("1.0", "\n")
                    self.historial.insert("1.0", resultado)
                    self.historial.insert("1.0", "\n")
                    self.historial.insert("1.0", "=")
                    self.historial.insert("1.0", "\n")
                    self.historial.insert("1.0", ecuasionw)
                    self.historial.insert("1.0", "Sin")
                    self.historial.insert("1.0", "____________")
                    self.historial.configure(state="disabled")

    def tange(self):

            global i, resultado, ecuasion, op, x,ecuasionw

            try:
                ecuasionw = float(self.pantallaNor.get(1.0, END + "-1c"))
                ecuasion = math.radians(ecuasionw)
                resultado = math.tan(ecuasion)

            except ValueError:
                            op += 1
                            self.pantallaNor.configure(state="normal")
                            self.pantallaNor.delete("1.0", END)
                            self.pantallaNor.insert("1.0", "ERROR(Syntax)")
                            self.pantallaNor.configure(state="disabled")

                            if (x > 0):
                                self.historial.configure(state="normal")
                                self.historial.insert("1.0", "\n")
                                self.historial.insert("1.0", "\n")
                                self.historial.insert("1.0", "ERROR(Syntax)")
                                self.historial.insert("1.0", "\n")
                                self.historial.insert("1.0", "Error")
                                self.historial.insert("1.0", "Tan")
                                self.historial.insert("1.0", "____________")
                                self.pantallaNor.configure(state="disabled")

            else:
                    self.pantallaNor.configure(state="normal")
                    self.pantallaNor.delete("1.0", END)
                    self.pantallaNor.insert("1.0", resultado)
                    self.pantallaNor.configure(state="disabled")

                    op += 1

                    if (x > 0):
                            self.historial.configure(state="normal")
                            self.historial.insert("1.0", "\n")
                            self.historial.insert("1.0", "\n")
                            self.historial.insert("1.0", resultado)
                            self.historial.insert("1.0", "\n")
                            self.historial.insert("1.0", "=")
                            self.historial.insert("1.0", "\n")
                            self.historial.insert("1.0", ecuasionw)
                            self.historial.insert("1.0", "Tan")
                            self.historial.insert("1.0", "____________")
                            self.historial.configure(state="disabled")

    def facto(self):

                        global i, resultado, op, x, ecuasionw

                        try:
                            ecuasionw = int(self.pantallaNor.get(1.0, END + "-1c"))

                            if(ecuasionw>100):

                                resultado =0

                                self.pantallaNor.configure(state="normal")
                                self.pantallaNor.delete("1.0", END)
                                self.pantallaNor.insert("1.0", "ERROR(Numero grande)")
                                self.pantallaNor.configure(state="disabled")

                                if (x > 0):
                                    self.historial.configure(state="normal")
                                    self.historial.insert("1.0", "\n")
                                    self.historial.insert("1.0", "\n")
                                    self.historial.insert("1.0", "ERROR de Memoria(Numero grande) ")
                                    self.historial.insert("1.0", "\n")
                                    self.historial.insert("1.0", "Error")
                                    self.historial.insert("1.0", "Fac")
                                    self.historial.insert("1.0", "____________")
                                    self.pantallaNor.configure(state="disabled")

                            else:
                                 resultado = math.factorial(ecuasionw)

                        except ValueError:
                            op += 1
                            self.pantallaNor.configure(state="normal")
                            self.pantallaNor.delete("1.0", END)
                            self.pantallaNor.insert("1.0", "ERROR(Syntax)")
                            self.pantallaNor.configure(state="disabled")

                            if (x > 0):
                                self.historial.configure(state="normal")
                                self.historial.insert("1.0", "\n")
                                self.historial.insert("1.0", "\n")
                                self.historial.insert("1.0", "ERROR(Syntax)")
                                self.historial.insert("1.0", "\n")
                                self.historial.insert("1.0", "Error")
                                self.historial.insert("1.0", "Fac")
                                self.historial.insert("1.0", "____________")
                                self.pantallaNor.configure(state="disabled")

                        else:
                            self.pantallaNor.configure(state="normal")
                            self.pantallaNor.delete("1.0", END)
                            self.pantallaNor.insert("1.0", resultado)
                            self.pantallaNor.configure(state="disabled")

                            op += 1

                            if (x > 0):
                                self.historial.configure(state="normal")
                                self.historial.insert("1.0", "\n")
                                self.historial.insert("1.0", "\n")
                                self.historial.insert("1.0", resultado)
                                self.historial.insert("1.0", "\n")
                                self.historial.insert("1.0", "=")
                                self.historial.insert("1.0", "\n")
                                self.historial.insert("1.0", ecuasionw)
                                self.historial.insert("1.0", "Fac")
                                self.historial.insert("1.0", "____________")
                                self.historial.configure(state="disabled")
                        return

    def desi(self):

                        global i, resultado, op, x, ecuasionw,rue,rde,im

                        try:

                            ecuasionw = float(self.pantallaNor.get(1.0, END + "-1c"))
                            rue,rde=math.modf(ecuasionw)
                            im=rue

                        except ValueError:
                            op += 1
                            self.pantallaNor.configure(state="normal")
                            self.pantallaNor.delete("1.0", END)
                            self.pantallaNor.insert("1.0", "ERROR(Syntax)")
                            self.pantallaNor.configure(state="disabled")

                            if (x > 0):
                                self.historial.configure(state="normal")
                                self.historial.insert("1.0", "\n")
                                self.historial.insert("1.0", "\n")
                                self.historial.insert("1.0", "ERROR(Syntax)")
                                self.historial.insert("1.0", "\n")
                                self.historial.insert("1.0", "Error")
                                self.historial.insert("1.0", "Frac")
                                self.historial.insert("1.0", "____________")
                                self.pantallaNor.configure(state="disabled")

                        else:
                            self.pantallaNor.configure(state="normal")
                            self.pantallaNor.delete("1.0", END)
                            self.pantallaNor.insert("1.0", resultado)
                            self.pantallaNor.configure(state="disabled")

                            op += 1

                            if (x > 0):
                                self.historial.configure(state="normal")
                                self.historial.insert("1.0", "\n")
                                self.historial.insert("1.0", "\n")
                                self.historial.insert("1.0", im)
                                self.historial.insert("1.0", "\n")
                                self.historial.insert("1.0", "=")
                                self.historial.insert("1.0", "\n")
                                self.historial.insert("1.0", ecuasionw)
                                self.historial.insert("1.0", "Fac")
                                self.historial.insert("1.0", "____________")
                                self.historial.configure(state="disabled")
                        return
#/////////////////////////////////////////////////////////////Funciones de memoria ///////////////////////////////////////////////////////////////////////

#Memoria 1

    def memoriS(self):

        global i, resultadom1, ecuasionm1, op, x, memoria1

        try:
            ecuasionm1 = self.pantallaNor.get(1.0, END + "-1c")
            resultadom1 = eval(ecuasionm1)


        except ZeroDivisionError:
            op += 1
            self.pantallaNor.configure(state="normal")
            self.pantallaNor.delete("1.0", END)
            self.pantallaNor.insert("1.0", "ERROR M1")
            self.pantallaNor.configure(state="disabled")

            if (x > 0):
                self.historial.configure(state="normal")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "ERROR M1 No Guardado")
                self.historial.insert("1.0", "\n")
                self.pantallaNor.configure(state="disabled")

        except SyntaxError:
            op += 1
            self.pantallaNor.configure(state="normal")
            self.pantallaNor.delete("1.0", END)
            self.pantallaNor.insert("1.0", "ERROR M1")
            self.pantallaNor.configure(state="disabled")

            if (x > 0):
                self.historial.configure(state="normal")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "ERROR M1 No Guardado")
                self.historial.insert("1.0", "\n")
                self.pantallaNor.configure(state="disabled")

        except SyntaxWarning:
            op += 1
            self.pantallaNor.configure(state="normal")
            self.pantallaNor.delete("1.0", END)
            self.pantallaNor.insert("1.0", "ERROR M1")
            self.pantallaNor.configure(state="disabled")

            if (x > 0):
                self.historial.configure(state="normal")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "ERROR M1 No Guardado")
                self.historial.insert("1.0", "\n")
                self.pantallaNor.configure(state="disabled")

        except TypeError:
            op += 1
            self.pantallaNor.configure(state="normal")
            self.pantallaNor.delete("1.0", END)
            self.pantallaNor.insert("1.0", "ERROR M1")
            self.pantallaNor.configure(state="disabled")

            if (x > 0):
                self.historial.configure(state="normal")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "ERROR M1 No Guardado ")
                self.historial.insert("1.0", "\n")
                self.pantallaNor.configure(state="disabled")
        else:
            memoria1=resultadom1
            self.pantallaNor.configure(state="normal")
            self.pantallaNor.delete("1.0", END)
            self.pantallaNor.insert("1.0", "GUARDADO ")
            self.pantallaNor.configure(state="disabled")

            op += 1

            if (x > 0):
                self.historial.configure(state="normal")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "GUARDADO M1 ")
                self.historial.insert("1.0", "\n")
                self.historial.configure(state="disabled")

        return

    def memoriR(self):

        global i, op, x, memoria1

        self.pantallaNor.configure(state="normal")
        self.pantallaNor.delete("1.0", END)
        self.pantallaNor.insert("1.0", memoria1)
        self.pantallaNor.configure(state="disabled")

        op += 1

        if (x > 0):
                self.historial.configure(state="normal")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0",memoria1)
                self.historial.insert("1.0", " M1:")
                self.historial.insert("1.0", "\n")
                self.historial.configure(state="disabled")
        return

    def memoriC(self):

        global i, op, x, memoria1

        memoria1=0.0
        self.pantallaNor.configure(state="normal")
        self.pantallaNor.delete("1.0", END)
        self.pantallaNor.insert("1.0", memoria1)
        self.pantallaNor.configure(state="disabled")

        op += 1

        if (x > 0):
                self.historial.configure(state="normal")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", " Basio ")
                self.historial.insert("1.0", " M1:")
                self.historial.insert("1.0", "\n")
                self.historial.configure(state="disabled")
        return

    def memorimas(self):

        global i, resultadom1, ecuasionm1, op, x, memoria1,mesu

        try:
            ecuasionm1 = self.pantallaNor.get(1.0, END + "-1c")
            mesu=eval(ecuasionm1)
            resultadom1=memoria1+mesu


        except ZeroDivisionError:
            op += 1
            self.pantallaNor.configure(state="normal")
            self.pantallaNor.delete("1.0", END)
            self.pantallaNor.insert("1.0", "ERROR M1 ")
            self.pantallaNor.configure(state="disabled")

            if (x > 0):
                self.historial.configure(state="normal")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "ERROR M1 No Sumado ")
                self.historial.insert("1.0", "\n")
                self.pantallaNor.configure(state="disabled")

        except SyntaxError:
            op += 1
            self.pantallaNor.configure(state="normal")
            self.pantallaNor.delete("1.0", END)
            self.pantallaNor.insert("1.0", "ERROR M1 ")
            self.pantallaNor.configure(state="disabled")

            if (x > 0):
                self.historial.configure(state="normal")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "ERROR M1 No Sumado ")
                self.historial.insert("1.0", "\n")
                self.pantallaNor.configure(state="disabled")

        except SyntaxWarning:
            op += 1
            self.pantallaNor.configure(state="normal")
            self.pantallaNor.delete("1.0", END)
            self.pantallaNor.insert("1.0", "ERROR M1 ")
            self.pantallaNor.configure(state="disabled")

            if (x > 0):
                self.historial.configure(state="normal")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "ERROR M1 No Sumado ")
                self.historial.insert("1.0", "\n")
                self.pantallaNor.configure(state="disabled")

        except TypeError:
            op += 1
            self.pantallaNor.configure(state="normal")
            self.pantallaNor.delete("1.0", END)
            self.pantallaNor.insert("1.0", "ERROR M1 ")
            self.pantallaNor.configure(state="disabled")

            if (x > 0):
                self.historial.configure(state="normal")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "ERROR M1 No Sumado ")
                self.historial.insert("1.0", "\n")
                self.pantallaNor.configure(state="disabled")
        else:
            memoria1=resultadom1
            self.pantallaNor.configure(state="normal")
            self.pantallaNor.delete("1.0", END)
            self.pantallaNor.insert("1.0", "GUARDADO ")
            self.pantallaNor.configure(state="disabled")

            op += 1

            if (x > 0):
                self.historial.configure(state="normal")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "_M1 ")
                self.historial.insert("1.0", mesu)
                self.historial.insert("1.0", "SUMADO:")
                self.historial.insert("1.0", "\n")
                self.historial.configure(state="disabled")

        return


    def memorires(self):

        global i, resultadom1, ecuasionm1, op, x, memoria1,mesu

        try:
            ecuasionm1 = self.pantallaNor.get(1.0, END + "-1c")
            mesu=eval(ecuasionm1)
            resultadom1=memoria1-mesu


        except ZeroDivisionError:
            op += 1
            self.pantallaNor.configure(state="normal")
            self.pantallaNor.delete("1.0", END)
            self.pantallaNor.insert("1.0", "ERROR M1 ")
            self.pantallaNor.configure(state="disabled")

            if (x > 0):
                self.historial.configure(state="normal")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "ERROR M1 No Restado")
                self.historial.insert("1.0", "\n")
                self.pantallaNor.configure(state="disabled")

        except SyntaxError:
            op += 1
            self.pantallaNor.configure(state="normal")
            self.pantallaNor.delete("1.0", END)
            self.pantallaNor.insert("1.0", "ERROR M1 ")
            self.pantallaNor.configure(state="disabled")

            if (x > 0):
                self.historial.configure(state="normal")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "ERROR M1 No Restado ")
                self.historial.insert("1.0", "\n")
                self.pantallaNor.configure(state="disabled")

        except SyntaxWarning:
            op += 1
            self.pantallaNor.configure(state="normal")
            self.pantallaNor.delete("1.0", END)
            self.pantallaNor.insert("1.0", "ERROR M1 ")
            self.pantallaNor.configure(state="disabled")

            if (x > 0):
                self.historial.configure(state="normal")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "ERROR M1 No Restado ")
                self.historial.insert("1.0", "\n")
                self.pantallaNor.configure(state="disabled")

        except TypeError:
            op += 1
            self.pantallaNor.configure(state="normal")
            self.pantallaNor.delete("1.0", END)
            self.pantallaNor.insert("1.0", "ERROR ")
            self.pantallaNor.configure(state="disabled")

            if (x > 0):
                self.historial.configure(state="normal")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "ERROR M1 No Restado ")
                self.historial.insert("1.0", "\n")
                self.pantallaNor.configure(state="disabled")
        else:
            memoria1=resultadom1
            self.pantallaNor.configure(state="normal")
            self.pantallaNor.delete("1.0", END)
            self.pantallaNor.insert("1.0", "GUARDADO ")
            self.pantallaNor.configure(state="disabled")

            op += 1

            if (x > 0):
                self.historial.configure(state="normal")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "_M1 ")
                self.historial.insert("1.0", mesu)
                self.historial.insert("1.0", "Restado:")
                self.historial.insert("1.0", "\n")
                self.historial.configure(state="disabled")

        return

#memoria 2

    def memoriS2(self):

        global i, resultadom1, ecuasionm1, op, x, memoria2

        try:
            ecuasionm1 = self.pantallaNor.get(1.0, END + "-1c")
            resultadom1 = eval(ecuasionm1)


        except ZeroDivisionError:
            op += 1
            self.pantallaNor.configure(state="normal")
            self.pantallaNor.delete("1.0", END)
            self.pantallaNor.insert("1.0", "ERROR M2 ")
            self.pantallaNor.configure(state="disabled")

            if (x > 0):
                self.historial.configure(state="normal")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "ERROR M2 No Guardado ")
                self.historial.insert("1.0", "\n")
                self.pantallaNor.configure(state="disabled")

        except SyntaxError:
            op += 1
            self.pantallaNor.configure(state="normal")
            self.pantallaNor.delete("1.0", END)
            self.pantallaNor.insert("1.0", "ERROR M2 ")
            self.pantallaNor.configure(state="disabled")

            if (x > 0):
                self.historial.configure(state="normal")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "ERROR M2 No Guardado ")
                self.historial.insert("1.0", "\n")
                self.pantallaNor.configure(state="disabled")

        except SyntaxWarning:
            op += 1
            self.pantallaNor.configure(state="normal")
            self.pantallaNor.delete("1.0", END)
            self.pantallaNor.insert("1.0", "ERROR M2 ")
            self.pantallaNor.configure(state="disabled")

            if (x > 0):
                self.historial.configure(state="normal")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "ERROR M2 No Guardado ")
                self.historial.insert("1.0", "\n")
                self.pantallaNor.configure(state="disabled")

        except TypeError:
            op += 1
            self.pantallaNor.configure(state="normal")
            self.pantallaNor.delete("1.0", END)
            self.pantallaNor.insert("1.0", "ERROR M2 ")
            self.pantallaNor.configure(state="disabled")

            if (x > 0):
                self.historial.configure(state="normal")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "ERROR M2 No Guardado ")
                self.historial.insert("1.0", "\n")
                self.pantallaNor.configure(state="disabled")
        else:
            memoria2=resultadom1
            self.pantallaNor.configure(state="normal")
            self.pantallaNor.delete("1.0", END)
            self.pantallaNor.insert("1.0", "GUARDADO ")
            self.pantallaNor.configure(state="disabled")

            op += 1

            if (x > 0):
                self.historial.configure(state="normal")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "GUARDADO M2 ")
                self.historial.insert("1.0", "\n")
                self.historial.configure(state="disabled")

        return

    def memoriR2(self):

        global i, op, x, memoria2

        self.pantallaNor.configure(state="normal")
        self.pantallaNor.delete("1.0", END)
        self.pantallaNor.insert("1.0", memoria2)
        self.pantallaNor.configure(state="disabled")

        op += 1

        if (x > 0):
                self.historial.configure(state="normal")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0",memoria2)
                self.historial.insert("1.0", " M2:")
                self.historial.insert("1.0", "\n")
                self.historial.configure(state="disabled")
        return

    def memoriC2(self):

        global i, op, x, memoria2

        memoria2=0.0
        self.pantallaNor.configure(state="normal")
        self.pantallaNor.delete("1.0", END)
        self.pantallaNor.insert("1.0", memoria2)
        self.pantallaNor.configure(state="disabled")

        op += 1

        if (x > 0):
                self.historial.configure(state="normal")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", " Basio ")
                self.historial.insert("1.0", " M2:")
                self.historial.insert("1.0", "\n")
                self.historial.configure(state="disabled")
        return

    def memorimas2(self):

        global i, resultadom1, ecuasionm1, op, x, memoria2,mesu

        try:
            ecuasionm1 = self.pantallaNor.get(1.0, END + "-1c")
            mesu=eval(ecuasionm1)
            resultadom1=memoria2+mesu


        except ZeroDivisionError:
            op += 1
            self.pantallaNor.configure(state="normal")
            self.pantallaNor.delete("1.0", END)
            self.pantallaNor.insert("1.0", "ERROR M2 ")
            self.pantallaNor.configure(state="disabled")

            if (x > 0):
                self.historial.configure(state="normal")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "ERROR M2 No Sumado ")
                self.historial.insert("1.0", "\n")
                self.pantallaNor.configure(state="disabled")

        except SyntaxError:
            op += 1
            self.pantallaNor.configure(state="normal")
            self.pantallaNor.delete("1.0", END)
            self.pantallaNor.insert("1.0", "ERROR M2 ")
            self.pantallaNor.configure(state="disabled")

            if (x > 0):
                self.historial.configure(state="normal")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "ERROR M2 No Sumado ")
                self.historial.insert("1.0", "\n")
                self.pantallaNor.configure(state="disabled")

        except SyntaxWarning:
            op += 1
            self.pantallaNor.configure(state="normal")
            self.pantallaNor.delete("1.0", END)
            self.pantallaNor.insert("1.0", "ERROR M2 ")
            self.pantallaNor.configure(state="disabled")

            if (x > 0):
                self.historial.configure(state="normal")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "ERROR M2 No Sumado ")
                self.historial.insert("1.0", "\n")
                self.pantallaNor.configure(state="disabled")

        except TypeError:
            op += 1
            self.pantallaNor.configure(state="normal")
            self.pantallaNor.delete("1.0", END)
            self.pantallaNor.insert("1.0", "ERROR M2 ")
            self.pantallaNor.configure(state="disabled")

            if (x > 0):
                self.historial.configure(state="normal")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "ERROR M2 No Sumado ")
                self.historial.insert("1.0", "\n")
                self.pantallaNor.configure(state="disabled")
        else:
            memoria2=resultadom1
            self.pantallaNor.configure(state="normal")
            self.pantallaNor.delete("1.0", END)
            self.pantallaNor.insert("1.0", "GUARDADO ")
            self.pantallaNor.configure(state="disabled")

            op += 1

            if (x > 0):
                self.historial.configure(state="normal")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "_M2 ")
                self.historial.insert("1.0", mesu)
                self.historial.insert("1.0", "SUMADO:")
                self.historial.insert("1.0", "\n")
                self.historial.configure(state="disabled")

        return


    def memorires2(self):

        global i, resultadom1, ecuasionm1, op, x, memoria2,mesu

        try:
            ecuasionm1 = self.pantallaNor.get(1.0, END + "-1c")
            mesu=eval(ecuasionm1)
            resultadom1=memoria2-mesu


        except ZeroDivisionError:
            op += 1
            self.pantallaNor.configure(state="normal")
            self.pantallaNor.delete("1.0", END)
            self.pantallaNor.insert("1.0", "ERROR M2 ")
            self.pantallaNor.configure(state="disabled")

            if (x > 0):
                self.historial.configure(state="normal")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "ERROR M2 No Restado ")
                self.historial.insert("1.0", "\n")
                self.pantallaNor.configure(state="disabled")

        except SyntaxError:
            op += 1
            self.pantallaNor.configure(state="normal")
            self.pantallaNor.delete("1.0", END)
            self.pantallaNor.insert("1.0", "ERROR M2 ")
            self.pantallaNor.configure(state="disabled")

            if (x > 0):
                self.historial.configure(state="normal")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "ERROR M2 No Restado ")
                self.historial.insert("1.0", "\n")
                self.pantallaNor.configure(state="disabled")

        except SyntaxWarning:
            op += 1
            self.pantallaNor.configure(state="normal")
            self.pantallaNor.delete("1.0", END)
            self.pantallaNor.insert("1.0", "ERROR M2 ")
            self.pantallaNor.configure(state="disabled")

            if (x > 0):
                self.historial.configure(state="normal")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "ERROR M2 No Restado ")
                self.historial.insert("1.0", "\n")
                self.pantallaNor.configure(state="disabled")

        except TypeError:
            op += 1
            self.pantallaNor.configure(state="normal")
            self.pantallaNor.delete("1.0", END)
            self.pantallaNor.insert("1.0", "ERROR M2 ")
            self.pantallaNor.configure(state="disabled")

            if (x > 0):
                self.historial.configure(state="normal")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "ERROR M2 No Restado ")
                self.historial.insert("1.0", "\n")
                self.pantallaNor.configure(state="disabled")
        else:
            memoria2=resultadom1
            self.pantallaNor.configure(state="normal")
            self.pantallaNor.delete("1.0", END)
            self.pantallaNor.insert("1.0", "GUARDADO ")
            self.pantallaNor.configure(state="disabled")

            op += 1

            if (x > 0):
                self.historial.configure(state="normal")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "\n")
                self.historial.insert("1.0", "_M2 ")
                self.historial.insert("1.0", mesu)
                self.historial.insert("1.0", "Restado:")
                self.historial.insert("1.0", "\n")
                self.historial.configure(state="disabled")

        return



#contadores y variavles

i=1.0#
x=0
op=0

pi=0.0
rue=0.0
rde=0.0
im=0.0

memoria1=0.0
memoria2=0.0



ecuasionw=0.0
resultado=""
ecuasion=""

resultadom1=""
ecuasionm1=""
re=""

#ventana
vent=Tk()
app=MyVentana(vent)
app.mainloop()