jueves, 18 de abril de 2013

Ecuacion de Segundo Grado en Python 3 usando Tkinter

En el post anterior (16/abril) publicamos el código para la resolucion de ecuaciones  de segundo grado en python 3.x. Partiendo de este código anterior desarrollamos una aplicacion con interfaz de usuario, usando la librería tkinter, en nuestro intento por aprender programacion en python 3.3. El código queda como sigue.

## graficador de  la funciones
from tkinter import*
from tkinter import messagebox
import matplotlib.pyplot as plt
import numpy as np
ventana = Frame(height = 400, width = 400)
ventana.pack(padx = 10, pady = 10)
### Declarando Variables
a = DoubleVar()
b = DoubleVar()
c= DoubleVar()
restx1 = StringVar()
restx2 = StringVar()

#Declarando funciones 
### funcion graficar
def graficar():
     a = aA.get()
     b = bB.get()
     c = cC.get()
     ax = float(a)
     bx = float(b)
     cx  = float (c)
     x = np.arange(-10,10,0.5)
     y = ax*x**2 + bx*x + cx
     plt.plot(x,y)
     plt.title('a*x^2 + b*x + c = 0')
     plt.xlabel('X')
     plt.ylabel('Y')
     plt.show()

##termina funcion graficar
### inica funcion calcular
def calcular():

        
        a = aA.get()
        b = bB.get()
        c = cC.get()
        ax = float(a)
        bx = float(b)
        cx  = float (c)
        ## calculando Delta
        delta = float(bx**2-4*ax*cx)
           
        if delta<0:
                
                messagebox.showerror('Eror', 'No hay solucion')

        elif delta ==0:
            s == float(-bx/2*ax)
            messagebox.showinfo('resultado','Solucion unica ', s)
        else:
             
             
                  resultado = Label(ventana, text =
                                   "Resultado")
                  resultado.place(bordermode = OUTSIDE, height = 30, width= 100, x = 150, y= 250)
                  resultado1 = Label(ventana, text =
                                   "X1")
                  resultado1.place(bordermode = OUTSIDE, height = 30, width= 50, x = 180, y= 280)
                  resultado2 = Label(ventana, text =
                                   "X2")
                  resultado2.place(bordermode = OUTSIDE, height = 30, width= 50, x = 180, y= 310)
                  x1 = float((-bx+((bx**2 - 4*ax*cx))**0.5)/(2*ax))
                  x2 = float((-bx-((bx**2 - 4*ax*cx))**0.5)/(2*ax))
                  r1 = Label(ventana,textvariable = restx1)
                  r1.place(bordermode = OUTSIDE, height = 30, width= 50, x = 230, y= 280)
                  restx1.set(x1)
                  r2 = Label(ventana,textvariable = restx2) 
                  r2.place(bordermode = OUTSIDE, height = 30, width= 50, x = 230, y= 310)
                  restx2.set(x2)
                  
##iniciando maquetado de  interfaz
aA = Entry(ventana, textvariable = a)
aA.place(bordermode = OUTSIDE, height = 30, width = 50, x = 10, y = 40)
bB = Entry (ventana, textvariable = b)
bB.place(bordermode = OUTSIDE, height = 30, width = 50, x = 130, y = 40)
cC = Entry(ventana, textvariable = c)
cC.place(bordermode = OUTSIDE, height = 30, width = 50, x = 230, y = 40)
## entrada de TExto

xa = Label(ventana, text = "X^2 + ")
xa.place(bordermode = OUTSIDE, height = 30, width = 50, x =70,y=40 )
xb = Label(ventana, text = "X + ")
xb.place(bordermode = OUTSIDE, height = 30, width = 50, x = 180, y = 40)
xc = Label(ventana, text = "= 0 ")
xc.place(bordermode = OUTSIDE, height = 30, width = 50, x=280, y = 40)

### boton de graficar

graficar = Button ( ventana, text = "Graficar", command = graficar)
graficar.place(bordermode= OUTSIDE, height= 40, width = 100, x = 40, y = 200)

## boton calcular
calcular = Button (ventana, text = "Calcular", command = calcular)
calcular.place(bordermode = OUTSIDE, height = 40, width = 100, x = 160, y = 200)
## terminado el  maquetetado de la  GUI

ventana.mainloop()
Nuestro codigo ha crecido en gran manera, en el post anterios solo eran aproximadamente 30 lineas  y en este momento tenemos un total de 100 lineas de codigo  ptyhon 3.3. La apliacion queda de la siguiente manera.



















Compara la cantidad de codigo Python  vs la cantida de  Codigo Matlab, ¿Cual crees que es mas conveniente?, ¿Cual se te hace mas facil?, ¿Cual te enseñan en la facultad de ingenieria? Tu tienes la unica respuesta si deseas aprender python.

1 comentario:

  1. hum muito bom o código, me ajudou com alguns problemas. agradeço.

    ResponderEliminar