Proyecto Final del Seminario de Programación en Python.
Codigo
1 #!/usr/bin/python
2 # -*- coding: iso-8859-15 -*-
3
4 """
5 Calculadora Multifuncional
6 Autor: Diana Insuasty
7 Docente: Rodrigo A. Carreño V. (rocarreno)
8 """
9
10 ################## funciones.py
11
12 import math
13 class Calculador: #clase Calculador
14 def suma(self,a,b):
15 return a+b #funcion que realiza la suma
16 def resta(self,a,b):
17 return a-b #funcion que realiza la resta
18 def multiplica(self,a,b):
19 return a*b #funcion que realiza la multiplicacion
20 def division(self,a,b):
21 return a/b #funcion que realiza la division
22 def raiz(self,a):
23 return math.sqrt(a) #funcion que realiza la raiz
24 def coseno(self,a):
25 return math.cos(a) #funcion que realiza el coseno
26 def seno(self,a):
27 return math.sin(a) #funcion que realiza la seno
28 def senhh(self,a):
29 return math.sinh(a)#funcion que retorna la hiperbolica de un numero x
30 def cosa(self,a):
31 return math.acos(a)#funcion que realiza el arco coseno de un numero x
32 def senoa(self,a):
33 return math.asin(a)#funcion que realiza el arco seno de un numero x
34 def tangente(self,a):
35 return math.tan(a)#funcion que realiza la tangente de un numero x
36 def tangh(self,a):
37 return math.tanh(a)#funcion que realiza la hiperbolica de un numero x
38 def cotangente(self,a):
39 return math.atan(a)#funcion que realiza el arco tangente de un numero x
40 def hipotenusa(self,x,y):
41 return math.hypot(x,y)#funcion que realiza la hipotenusa de un numero x
42 def hiperco(self,a):
43 return math.acosh(a)#funcion que realiza la hiperbolica de arco coseno de un numero x
44 def hipesen(self,a):
45 return math.asinh(a)#funcion que realiza la hiperbolica de arco seno de un numero x
46 def hipetan(self,a):
47 return math.atanh(a)#funcion que realiza la hiperbolica de arco tangente de un numero x
48 def coshh(self,a):
49 return math.cosh(a)#funcion que realiza la hiperbolica de coseno de un numero x
50 def exponencial(self,a):
51 return math.exp(a)#funcion que retorna el valor exponencial e**x de un numero x
52 def logaritmobaseten(self,a):
53 return math.log10(a)#funcion que realiza el logaritmo en base 10 de un numero x
54 def loga(self,a,b):
55 return math.log(a,b)#funcion que realiza el logaritmo de un numero x
56 def valorabsoluto(self,a):
57 return math.fabs(a) #realiza el valor absoluto de x numero
58 def algoceil(self,a):
59 return math.ceil10(a)#Return the ceiling of x as a float, the smallest integer value greater than or equal to x.
60 def valorfloor(self,a):
61 return math.floor(a)#Return the floor of x as a float, the largest integer value less than or equal to x.
62 def valorfmod(self,a,b):
63 return math.fmod(a,b)#retorna el modulo de una division
64 def valorfrexp(self,a):
65 return math.frexp(a)#retorna la mantiza y el exponente de un numero x
66 def valorldexp(self,a,b):
67 return math.ldexp(a,b)#retorna x*(2**i). inverso de la funcion frexp()
68 def vmodf(self,a):
69 return math.modf(a)#retorna la parte fraccionaria y entera de un numero x
70 def potencia (self,x,y):
71 return math.pow(x,y)#realiza la potencia
72 def atann2 (self,x,y):
73 return math.atan2(x,y)#retorna arcotangente entre (y/x), in radianes
74 def fce(self,x):
75 return math.ceil(x)#Return the ceiling of x as a float, the smallest integer value greater than or equal to x.
76 #######funcion que convierte un angulo x de radianes a grados
77 def radgra(self,x):
78 return math.degrees(x)
79 ########################################################
80 ########funcion que convierte un angulo x de grados a radianes
81 def grarad(self,x):
82 return math.radians(x)
83 ########################################################
84
85 ################## menuventana.py
86
87 from Tkinter import * #llamo las librerias graficas Tk
88 import tkSimpleDialog #libreria de almacenamiento de dialogos
89 import tkMessageBox #libreria de mensajes
90 import funciones #incluyendo el modulo funciones
91 import math #libreria matematica
92 d=funciones.Calculador() #creando objeto para utilizar la Clase Calculador en el modulo funciones
93 root=Tk()#llamo el constructor de Tk y se lo asigno al objeto root
94 #funciones
95 def suma():
96 a=int(tkSimpleDialog.askstring('Realizando Suma:','Digite un Numero'))#almacena enteros
97 b=int(tkSimpleDialog.askstring('Realizando Suma:','Digite un Numero'))#almacena enteros
98 c=d.suma(a,b)#llama a suma y le envia dos paramentros
99 tkMessageBox.showinfo("Resultado ",c)
100 def resta():
101 a=int(tkSimpleDialog.askstring('Realizando Resta:','Digite un Numero'))#almacena enteros
102 b=int(tkSimpleDialog.askstring('Realizando Resta:','Digite un Numero'))#almacena enteros
103 c=d.resta(a,b)#llama a resta y le envia dos paramentros
104 tkMessageBox.showinfo("Resultado",c)
105 def division():
106 a=float(tkSimpleDialog.askstring('Realizando Division:','Digite un Numero'))#almacena float
107 b=float(tkSimpleDialog.askstring('Realizando Division:','Digite un Numero'))#almacena float
108 if b==0: #si b==0 se ejecutara un mensaje de error
109 tkMessageBox.showwarning('precaucion:','La Division Sobre Cero no esta Definida')#mensaje de precaucion print 'Almaceno la cadena: ',a
110 else:
111 c=d.division(a,b)#llama a division y le envia dos paramentros, siempre y cuando b!=0
112 tkMessageBox.showinfo("Resultado",c)
113 def multiplicacion():
114 a=int (tkSimpleDialog.askstring('Realizando Multiplicacion:','Digite un Numero'))#almacena enteros
115 b=int(tkSimpleDialog.askstring('Realizando Multiplicacion:','Digite un Numero'))#almacena enteros
116 c=d.multiplica(a,b)#llama a multiplicacion y le envia dos paramentros
117 tkMessageBox.showinfo("Resultado",c)
118 def potenciacion():
119 a=int(tkSimpleDialog.askstring('Potencia:','Por Favor Digite la base'))#Almacena enteros
120 b=int(tkSimpleDialog.askstring('Potencia:','Por Favor Digite el exponente'))#Almacena enteros
121 c=d.potencia(a,b)#llama a potencia y le envia dos paramentros
122 tkMessageBox.showinfo("Resultado",c)#muestra el resultado en una caja de informacion
123 def raiz():
124 a=int(tkSimpleDialog.askstring('Raiz:','Por Favor Digite un Numero'))#almacena enteros
125 if a<0:
126 tkMessageBox.showwarning('precaucion:','La Raiz Negativa no esta Definida')#mensaje de precaucion print 'Almaceno la cadena: ',a
127 else:
128 c=d.raiz(a)#llama a raiz y le envia un paramentro
129 tkMessageBox.showinfo("Resultado",c)
130 def exponencial():
131 a=int(tkSimpleDialog.askstring('Exponencial:','Por Favor Digite un Numero'))
132 c=d.exponencial(a)#llama a exponencial y le envia un paramentro
133 tkMessageBox.showinfo("Resultado",c)
134 def coseno():
135 a=float(tkSimpleDialog.askstring('Coseno:','Por Favor Digite un Numero'))#almacena float
136 c=d.coseno(a)#llama a coseno y le envia un paramentro
137 tkMessageBox.showinfo("Resultado",c)
138 def seno():
139 a=float(tkSimpleDialog.askstring('Seno:','Por Favor Digite un Numero'))#almacena float
140 c=d.seno(a)#llama a seno y le envia un paramentro
141 tkMessageBox.showinfo("Resultado",c)
142 def tangente():
143 a=float(tkSimpleDialog.askstring('Tangente:','Por Favor Digite un Numero'))#almacena float
144 c=d.tangente(a)#llama a tangente y le envia un paramentro
145 tkMessageBox.showinfo("Resultado",c)
146 def tangenteh():
147 a=float(tkSimpleDialog.askstring('Tangente:','Por Favor Digite un Numero'))#almacena float
148 c=d.tangh(a)#llama a tangh y le envia un paramentro
149 tkMessageBox.showinfo("Resultado",c)
150 def cotangente():
151 a=float(tkSimpleDialog.askstring('Cotangente:','Por Favor Digite un Numero'))#almacena float
152 c=d.cotangente(a)#llama a cotangente y le envia un paramentro
153 tkMessageBox.showinfo("Resultado",c)
154 def arcoseno():
155 a=float(tkSimpleDialog.askstring('Arcoseno:','Por Favor Digite un Numero'))#almacena float
156 if(a>1 or a<-1): #evalua el rango de valores que acepta la funcion cosa
157 tkMessageBox.showwarning('precaucion:','Digite solo valores entre -1 y 1')#mensaje de precaucion
158 else:
159 c=d.cosa(a)#llama a cosa y le envia un paramentro
160 tkMessageBox.showinfo("Resultado",c)
161 def arcseno():
162 a=float(tkSimpleDialog.askstring('Arcoseno:','Por Favor Digite un Numero'))#almacena float
163 if(a>1 or a<-1):#evalua el rango de valores que acepta la funcion senoa
164 tkMessageBox.showwarning('precaucion:','Digite solo valores entre -1 y 1')#mensaje de precaucion
165 else:
166 c=d.senoa(a)#llama a senoa y le envia un parametro
167 tkMessageBox.showinfo("Resultado",c)
168 def hipoten():
169 a=int(tkSimpleDialog.askstring('','Digite un Numero'))#almacena enteros
170 b=int(tkSimpleDialog.askstring('','Digite un Numero'))#almacena enteros
171 c=d.hipotenusa(a,b)#llama a hipotenusa y le envia dos parametros
172 tkMessageBox.showinfo("Resultado",c)
173 def pip():
174 c=math.pi #llama la funcion pi
175 tkMessageBox.showinfo("Resultado",c)#muestra el resultado de pi
176 def atann2():
177 a=float(tkSimpleDialog.askstring('','Digite un Numero'))#almacena float
178 b=float(tkSimpleDialog.askstring('','Digite un Numero'))#almacena float
179 c=d.atann2(a,b)#llama atann2 y le envia dos parametros
180 tkMessageBox.showinfo("Resultado",c)
181 def funceil():
182 a=int(tkSimpleDialog.askstring('','Digite un Numero'))#almacena enteros
183 c=math.ceil(a)#llama a ceil y le envia un parametro
184 tkMessageBox.showinfo("Resultado",c)
185 def absoluto():
186 a=float(tkSimpleDialog.askstring('','Digite un Numero'))#almacena float
187 c=d.valorabsoluto(a)#llama a valorabsoluto y le envia un parametro
188 tkMessageBox.showinfo("Resultado",c)
189 def coseh():
190 a=float(tkSimpleDialog.askstring('','Digite un Numero'))#almacena float
191 c=d.coshh(a)#llama a coshh y le envia un parametro
192 tkMessageBox.showinfo("Resultado",c)
193 def angrad():
194 a=float(tkSimpleDialog.askstring('','Digite un Numero'))#almacena enteros
195 c=d.radgra(a)#llama a radgra y le envia un parametro
196 tkMessageBox.showinfo("Resultado",c)
197 def ex():
198 c=math.e #busca funcion e
199 tkMessageBox.showinfo("Resultado",c)#muestra el valor de e
200 def vfloor():
201 a=float(tkSimpleDialog.askstring('','Digite un Numero'))#almacena float
202 c=d.valorfloor(a)
203 tkMessageBox.showinfo("Resultado",c)
204 def vfmod():
205 a=float(tkSimpleDialog.askstring('','Digite un Numero'))#almacena float
206 b=float(tkSimpleDialog.askstring('','Digite un Numero'))
207 c=d.valorfmod(a,b)#llama a valorfmod y le envia dos parametros
208 tkMessageBox.showinfo("Resultado",c)
209 def vfrexp():
210 a=float(tkSimpleDialog.askstring('','Digite un Numero'))#almacena float
211 c=d.valorfrexp(a)#llama a valorfrexp y le envia un parametro
212 tkMessageBox.showinfo("Resultado",c)
213 def vledxp():
214 a=int(tkSimpleDialog.askstring('','Digite un Numero'))#almacena enteros
215 b=int(tkSimpleDialog.askstring('','Digite un Numero'))
216 c=d.valorldexp(a,b)
217 tkMessageBox.showinfo("Resultado",c)
218 def logg():
219 a=int(tkSimpleDialog.askstring('','Digite un Numero'))#almacena enteros
220 b=int(tkSimpleDialog.askstring('','Digite un Numero'))#almacena enteros
221 c=d.loga(a,b)#llama a loga y le envia dos parametros
222 tkMessageBox.showinfo("Resultado",c)
223 def logg1():
224 a=int(tkSimpleDialog.askstring('','Digite un Numero'))#almacena enteros
225 c=d.logaritmobaseten(a)#llama a logaritmoten y le envia un parametro
226 tkMessageBox.showinfo("Resultado",c)
227 def vmodff():
228 a=int(tkSimpleDialog.askstring('','Digite un Numero'))#almacena enteros
229 c=d.vmodf(a)#llama a vmodf y le envia un parametro
230 tkMessageBox.showinfo("Resultado",c)
231 def gradrad():
232 a=float(tkSimpleDialog.askstring('','Digite un Numero'))#almacena float
233 c=d.grarad(a)#llama a grarad y le envia un parametro
234 tkMessageBox.showinfo("Resultado",c)
235 def sinhh():
236 a=float(tkSimpleDialog.askstring('','Digite un Numero'))#almacena float
237 c=d.senhh(a)#llama a senhh y le envia un parametro
238 tkMessageBox.showinfo("Resultado",c)
239 #dimensiones de la ventana
240 root.minsize(300,200)
241 #barra de herramientas
242 toolbar=Frame(root)
243 #botones
244 b=Button(toolbar, text="Suma", command=suma, foreground="yellow", background="black")#crea un button con fondo negro y texto amarillo
245 b.pack(side=LEFT, padx=1, pady=1)
246 b=Button(toolbar, text="Resta", width=6, command=resta, foreground="yellow", background="black")
247 b.pack(side=LEFT, padx=1, pady=1)
248 b=Button(toolbar, text="Multiplicacion", width=10, command=multiplicacion, foreground="yellow", background="black")
249 b.pack(side=LEFT, padx=1, pady=1)
250 b=Button(toolbar, text="Division", width=6, command=division, foreground="yellow", background="black")
251 b.pack(side=LEFT, padx=1, pady=1)
252 b=Button(toolbar, text="Potencia", width=10, command=potenciacion, foreground="yellow", background="black")
253 b.pack(side=LEFT, padx=1, pady=1)
254 b=Button(toolbar, text="Exponencial", width=15, command=exponencial, foreground="yellow", background="black")
255 b.pack(side=LEFT, padx=1, pady=1)
256 b=Button(toolbar, text="Raiz", width=6, command=raiz, foreground="yellow", background="black")
257 b.pack(side=LEFT, padx=1, pady=1)
258 b=Button(text="Coseno", width=10, command=coseno, foreground="yellow", background="black")
259 b.pack(side=BOTTOM, padx=1, pady=1)
260 b=Button(text="Seno", width=10, command=seno, foreground="yellow", background="black")
261 b.pack(side=TOP, padx=1, pady=1)
262 b=Button(text="Log", width=10, command=logg, foreground="yellow", background="black")
263 b.pack(side=TOP, padx=1, pady=1)
264 b=Button(text="Log10", width=10, command=logg1, foreground="yellow", background="black")
265 b.pack(side=TOP, padx=1, pady=1)
266 b=Button(text="Tangente", width=10, command=tangente, foreground="yellow", background="black")
267 b.pack(side=BOTTOM, padx=1, pady=1)
268 b=Button(text="Pi", width=10, command=pip, foreground="yellow", background="black")
269 b.pack(side=TOP, padx=1, pady=1)
270 b=Button(text="Tanh", width=10, command=tangenteh, foreground="yellow", background="black")
271 b.pack(side=TOP, padx=1, pady=1)
272 b=Button(text="Arcoseno", width=10, command=arcoseno, foreground="yellow", background="black")
273 b.pack(side=TOP, padx=1, pady=1)
274 b=Button(text="Arcseno", width=10, command=arcseno, foreground="yellow", background="black")
275 b.pack(side=TOP, padx=1, pady=1 )
276 b=Button(text="Cotangente", width=10, command=cotangente, foreground="yellow", background="black")
277 b.pack(side=BOTTOM, padx=1, pady=1)
278 b=Button(text="Hipotenusa", width=10, command=hipoten, foreground="yellow", background="black")
279 b.pack(side=BOTTOM ,padx=1,pady=1)
280 b=Button(text="Sinh", width=10, command=sinhh, foreground="yellow", background="black")
281 b.pack(side=BOTTOM ,padx=1,pady=1)
282 b=Button(text="Atan2", width=10, command=atann2, foreground="yellow", background="black")
283 b.pack(side=TOP, padx=1, pady=1)
284 b=Button(text="Valor Absoluto", width=10, command=absoluto, foreground="yellow", background="black")
285 b.pack(side=TOP, padx=1, pady=1)
286 b=Button(text="Floor", width=10, command=vfloor, foreground="yellow", background="black")
287 b.pack(side=TOP, padx=1, pady=1)
288 b=Button(text="Radians", width=10, command=gradrad, foreground="yellow", background="black")
289 b.pack(side=TOP, padx=1, pady=1)
290 b=Button(text="Fmod", width=10, command=vfmod, foreground="yellow", background="black")
291 b.pack(side=TOP, padx=1, pady=1)
292 b=Button(text="Ceil", width=10, command=funceil, foreground="yellow", background="black")
293 b.pack(side=BOTTOM, padx=1, pady=1)
294 b=Button(text="Cosh", width=10, command=coseh, foreground="yellow", background="black")
295 b.pack(side=BOTTOM ,padx=1,pady=1)
296 b=Button(text="Frexp", width=10, command=vfrexp, foreground="yellow", background="black")
297 b.pack(side=BOTTOM ,padx=1,pady=1)
298 b=Button(text="Degrees", width=10, command=angrad, foreground="yellow", background="black")
299 b.pack(side=BOTTOM, padx=1, pady=1)
300 b=Button(text="e", width=10, command=ex, foreground="yellow", background="black")
301 b.pack(side=BOTTOM ,padx=1,pady=1)
302 b=Button(text="Modf", width=10, command=vmodff, foreground="yellow", background="black")
303 b.pack(side=TOP ,padx=1,pady=1)
304 b=Button(toolbar, foreground="red", text="Salir", background="black", width=6, command='exit')#crea el boton salir con fondo negro y texto rojo
305 b.pack(side=BOTTOM, padx=1, pady=1)
306 toolbar.pack(side=TOP, fill=Y)
307 #creo un menu
308 menu=Menu(root)
309 root.config(menu=menu)
310 filemenu=Menu(menu)
311 menu.add_cascade(label="Operaciones Básicas", menu=filemenu, )#opciones de menu desplegables
312 filemenu.add_command(label="Suma", command=suma, foreground="green", background="black")
313 filemenu.add_command(label="Resta", command=resta,foreground="green", background="black" )
314 filemenu.add_command(label="Multiplicacion", command=multiplicacion, foreground="green", background="black")
315 filemenu.add_command(label="Division", command=division, foreground="green", background="black")
316 filemenu.add_command(label="Raiz", command=raiz, foreground="green", background="black")
317 filemenu.add_command(label="Potenciacion", command=potenciacion, foreground="green", background="black")
318 filemenu.add_command(label="Exponenciacion", command=exponencial, foreground="green", background="black")
319 filemenu.add_separator()
320 filemenu.add_command(label="Salir", command='exit',foreground="red", background="black")
321 ########################################Menu 2 ############
322 men=Menu(root)
323 root.config(men=menu)
324 filemenu=Menu(men)
325 menu.add_cascade(label="Trigonometricas", men=filemenu)#opciones de menu desplegables
326 filemenu.add_command(label="Coseno", command=coseno, foreground="green", background="black")
327 filemenu.add_command(label="Seno", command=seno, foreground="green", background="black")
328 filemenu.add_command(label="Pi", command=pip, foreground="green", background="black")
329 filemenu.add_command(label="Arcoseno", command=arcoseno, foreground="green", background="black")
330 filemenu.add_command(label="Arcseno", command=arcseno, foreground="green", background="black")
331 filemenu.add_command(label="Tangente", command=tangente, foreground="green", background="black")
332 filemenu.add_command(label="Cotangente", command=cotangente, foreground="green", background="black")
333 filemenu.add_command(label="Hipotenusa", command=hipoten, foreground="green", background="black")
334 filemenu.add_command(label="Sinh", command=sinhh, foreground="green", background="black")
335 filemenu.add_command(label="Tanh", command=tangenteh, foreground="green", background="black")
336 ##############################
337 men=Menu(root)
338 root.config(men=menu)
339 filemenu=Menu(men)
340 menu.add_cascade(label="Mas Operaciones", men=filemenu)#opciones de menu desplegable
341 filemenu.add_command(label="Atan2", command=atann2, foreground="green", background="black")
342 filemenu.add_command(label="Valor Absoluto", command=absoluto, foreground="green", background="black")
343 filemenu.add_command(label="Ceil", command=funceil, foreground="green", background="black")
344 filemenu.add_command(label="Cosh", command=coseh, foreground="green", background="black")
345 filemenu.add_command(label="Degrees", command=angrad, foreground="green", background="black")
346 filemenu.add_command(label="e", command=ex, foreground="green", background="black")
347 filemenu.add_command(label="Floor", command=vfloor, foreground="green", background="black")
348 filemenu.add_command(label="Fmod", command=vfmod, foreground="green", background="black")
349
350 ##############################
351 men=Menu(root)
352 root.config(men=menu)
353 filemenu=Menu(men)
354 menu.add_cascade(label="Mas Operaciones2", men=filemenu)#opciones de menu desplegables
355 filemenu.add_command(label="Radians", command=gradrad, foreground="green", background="black")
356 filemenu.add_command(label="Frexp", command=vfrexp, foreground="green", background="black")
357 filemenu.add_command(label="Ldexp", command=vledxp, foreground="green", background="black")
358 filemenu.add_command(label="Log", command=logg, foreground="green", background="black")
359 filemenu.add_command(label="Log10", command=logg1, foreground="green", background="black")
360 filemenu.add_command(label="Modf", command=vmodff, foreground="green", background="black")
361
362 root.mainloop()
