Advertisement
teslariu

calcul

Jun 10th, 2021
193
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.73 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. #
  4.  
  5. import tkinter as tk
  6. from math import sqrt, factorial, pi
  7.  
  8.  
  9. # ventana de la calculadora
  10. ventana = tk.Tk()
  11. ventana.title("CALCULADORA")
  12. ventana.config(
  13.             width = 390,
  14.             height = 600,
  15.             bg = "Light Steel Blue"
  16.             )
  17. ventana.resizable(0,0)
  18.  
  19. ##########  Funciones  ###########################
  20.  
  21.  
  22. def clic(tecla):
  23.     """
  24.    Función que captura los clics en cada tecla de la calculadora
  25.    y los muestra en pantalla
  26.    """
  27.     global calculo # almacena el calculo a realizar como str: "2+sqrt(3)"
  28.     calculo = calculo + str(tecla)
  29.     ingresa_texto.set(calculo)
  30.    
  31.  
  32.  
  33. def limpieza():
  34.     """
  35.    Función que limpia la pantalla de la calculadora (CLEAR)
  36.    """
  37.     global calculo
  38.     ingresa_texto.set("0")
  39.     calculo = ""
  40.    
  41. def hacer_calculo():
  42.     """
  43.    Función que realiza el cálculo y lo muestra en pantalla
  44.    """
  45.     global calculo
  46.     try:
  47.         total = str(eval(calculo))
  48.     except Exception:
  49.         limpieza()
  50.         total = "ERROR"
  51.     ingresa_texto.set(total)
  52.    
  53.    
  54.    
  55.  
  56. ############  Main ##############################
  57.  
  58. # definimos las dimensiones de las teclas
  59. ancho = 10
  60. alto = 3
  61.  
  62. # inicializo la variable que almacena el cálculo a realizar
  63. calculo = ""
  64.  
  65. # creo una cadena de tkinter para mostrar en pantalla
  66. ingresa_texto = tk.StringVar()
  67.  
  68. # inicializo la calculadora
  69. limpieza()
  70.  
  71.  
  72. #########  botones de la calculadora ###############
  73. ####### primera fila: 1,2,3,+
  74. boton=tk.Button(text="1",width=ancho,height=alto,command=lambda:clic(1))
  75. boton.place(x=17,y=180)
  76. boton=tk.Button(text="2",width=ancho,height=alto,command=lambda:clic(2))
  77. boton.place(x=107,y=180)
  78. boton=tk.Button(text="3",width=ancho,height=alto,command=lambda:clic(3))
  79. boton.place(x=197,y=180)
  80. boton=tk.Button(text="+",width=ancho,height=alto,bg="white",command=lambda:clic('+'))
  81. boton.place(x=287,y=180)
  82.  
  83. ####### segunda fila: 4,5,6,-
  84. boton=tk.Button(text="4",width=ancho,height=alto,command=lambda:clic(4))
  85. boton.place(x=17,y=240)
  86. boton=tk.Button(text="5",width=ancho,height=alto,command=lambda:clic(5))
  87. boton.place(x=107,y=240)
  88. boton=tk.Button(text="6",width=ancho,height=alto,command=lambda:clic(6))
  89. boton.place(x=197,y=240)
  90. boton=tk.Button(text="-",width=ancho,height=alto,bg="white",command=lambda:clic('-'))
  91. boton.place(x=287,y=240)
  92.  
  93. ####### tercera fila: 7,8,9,*
  94. boton=tk.Button(text="7",width=ancho,height=alto,command=lambda:clic(7))
  95. boton.place(x=17,y=300)
  96. boton=tk.Button(text="8",width=ancho,height=alto,command=lambda:clic(8))
  97. boton.place(x=107,y=300)
  98. boton=tk.Button(text="9",width=ancho,height=alto,command=lambda:clic(9))
  99. boton.place(x=197,y=300)
  100. boton=tk.Button(text="*",width=ancho,height=alto,bg="white",command=lambda:clic('*'))
  101. boton.place(x=287,y=300)
  102.  
  103. ####### cuarta fila: (,0,),/
  104. boton=tk.Button(text="(",width=ancho,height=alto,bg="gainsboro",command=lambda:clic('('))
  105. boton.place(x=17,y=360)
  106. boton=tk.Button(text="0",width=ancho,height=alto,command=lambda:clic(0))
  107. boton.place(x=107,y=360)
  108. boton=tk.Button(text=")",width=ancho,height=alto,bg="gainsboro",command=lambda:clic(')'))
  109. boton.place(x=197,y=360)
  110. boton=tk.Button(text="/",width=ancho,height=alto,bg="white",command=lambda:clic('/'))
  111. boton.place(x=287,y=360)
  112.  
  113. ####### quinta fila: raiz, coma decimal, potencia, factorial
  114. boton=tk.Button(text="RAIZ",width=ancho,height=alto,bg="gainsboro",command=lambda:clic('sqrt('))
  115. boton.place(x=17,y=420)
  116. boton=tk.Button(text=".",width=ancho,height=alto,command=lambda:clic('.'))
  117. boton.place(x=107,y=420)
  118. boton=tk.Button(text="POW",width=ancho,height=alto,bg="gainsboro",command=lambda:clic('**'))
  119. boton.place(x=197,y=420)
  120. boton=tk.Button(text="!",width=ancho,height=alto,bg="gainsboro",command=lambda:clic('factorial('))
  121. boton.place(x=287,y=420)
  122.  
  123. ####### sexta fila: clear,%,PI,=
  124. boton=tk.Button(text="CL",width=ancho,height=alto,bg="cadet blue",command=limpieza)
  125. boton.place(x=17,y=480)
  126. boton=tk.Button(text="%",width=ancho,height=alto,bg="gainsboro",command=lambda:clic('%'))
  127. boton.place(x=107,y=480)
  128. boton=tk.Button(text="PI",width=ancho,height=alto,bg="gainsboro",command=lambda:clic(pi))
  129. boton.place(x=197,y=480)
  130. boton=tk.Button(text="=",width=ancho,height=alto,bg="cadet blue",command=hacer_calculo)
  131. boton.place(x=287,y=480)
  132.  
  133. #####  PANTALLA  ########
  134. pantalla = tk.Entry(
  135.             font = ('arial',20,'bold'),
  136.             width = 20,
  137.             textvariable = ingresa_texto, # variable que se muestra
  138.             state = tk.DISABLED,          # bloquea el ingreso de datos
  139.             bd = 20,                      # grosor del borde
  140.             bg = "powder blue",
  141.             justify = "right"
  142.             )
  143. pantalla.place(x=20, y=60)
  144.  
  145. ventana.mainloop()
  146.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement