miércoles, 3 de abril de 2013

Otra MiniCalculadora con Tkinter [Python]

Bueno Señores, de nuevo de regreso, me desaparezco por mucho tiempo aveces, ¿verdad?, bueno... hoy les quiero presentar una pequeña aplicación para hacer sumas, restas, multiplicaciones y divisiones. Si otra vez una calculadora, lo siento, no se me ocurre otra cosa, pero siempre hago una cuando hago uso de un lenguaje de programación que desconozco, es la mejor forma de experimentar. Si ya visitaste mis post anteriores has de preguntar: ¿Otra Calculadora en Python? jeje bueno la respuesta es si, pero en esta ocasión vamos a usar un GUI.


GUI son las siglas de interfaz gráfica de usuario. Son herramientas para crear interfaces gráficas, esto es, componentes gráficos con los cuales el usuario interacciona con la aplicación.

En mi caso les hablare de Tkinter: Es un binding de la biblioteca gráfica Tcl/Tk para el lenguaje de programación Python. Se considera un estándar para la interfaz gráfica de usuario (GUI) para Python y es el que viene por defecto con la instalación para Microsoft Windows.

Si a continuación mi ejemplo no te gusta y dices que Tkinter no es lo tuyo existen más alternativas disponibles como wxPythonPyQt y PyGTK que cumplen con todos los estándares de componente visual.

[Algunas de las definiciones anteriores fueron tomadas de nuestra amiga Wikipedia]

Cuidado en versiones como Python 2.7 es Tkinter en la versión 3 se usa tkinter [Minúsculas]

En el ejemplo siguiente hago uso de 3 Widgets, así se le llaman a los controles que nosotros conocemos en otros lenguajes como botones, cajas de texto, etc.
  • Label: Etiquetas
  • Button: Botones
  • Entry: Cajas de texto [Existe un elemento Text pero no es precisamente el que nosotros imaginamos]


Ahora si, aquí mi código, creo que no será necesaria una explicación, está muy fácil de entender, aunque para reforzar checa los comentarios:





Una captura :D






Si gustas aprender más acerca de los Widgets te recomiendo esta web: Python_gui_programming

Te deseo un excelente día y espero mi publicación te sea de utilidad, no olvides comentar tus dudas, regaños u opiniones, +1 o like :P 

    Choose :
  • OR
  • To comment
11 comentarios:
Write comentarios
  1. Tengo una duda, en la division: cuando la respuesta es inderteminada de que manera puedo hacer para que salga un aviso diciendo "no se puede dividir" o algo por el estilo (esto sucede cuando A/B si B = 0)

    ResponderEliminar
    Respuestas
    1. Se me ocurre que podría haber una comparación del valor de B antes de calcular, si vale 0, se puede mostrar un aviso en una etiqueta previamente inserta sin texto avisando de dicho error, por el momento no te puedo decir el código exacto para realizar esta validación debido al poco conocimiento y actualización que tengo de este lenguaje.

      Eliminar
    2. Ya vi, es solo comparar n2 con 0 y si el resultado es true mandar un mensaje como este: tkMessageBox.showinfo("Error","No se puede dividir entre 0") si es false continuar a realizar la operación aritmética.

      Eliminar
  2. Es bastante simple, sigue aprendiendo a ver si puedes hacer una calculadora al uso

    ResponderEliminar
  3. ya me descargue python 2.7.2 en windows 7 , pero los códigos que tu me das , no se que hacer , osea los copio y pego todo? y le doy enter? y como se hace para que salga esa ventanita de la minicalculadora , por fa ayudenme...!!!

    ResponderEliminar
    Respuestas
    1. Debes instalar un IDE (Ambiente de desarrollo integrado). Yo justo ahora uso Pycharm. Puedes ir a google y poner Pycharm y descargarlo, luego de ahi si podrás ejecutar el programa.

      Eliminar
  4. Te felicito
    +100 lince uwu

    ResponderEliminar
  5. Por favor tengo un problema, me da un error en el import tkMessageBox, no se si sea por la version de python, gracias

    ResponderEliminar
    Respuestas
    1. Lo correcto seria: import tkinter.messagebox
      Yo tenia el mismo error, espero te sirva ��

      Eliminar
  6. porfas un ejemplo cuando elresultado te vota en la ventana mismo

    ResponderEliminar
  7. me podrían ayudar con este codigo por favor, es en la parte de capturar el segundo numero, ya que me dice que no es posible llamar la funcion "click()" a la funcion "resul()"
    ahi esta la parte mas importante del codigo
    gracias
    #-*- coding: utf-8 -*-

    '''
    Created on 9/08/2016

    @author: mel
    '''
    from tkinter import *
    import math
    from test.test_math import math_testcases
    from mailcap import show
    from tkinter.messagebox import showinfo
    from math import sqrt
    import types

    if __name__ == '__main__':
    pass


    global num1,num2
    #organizo la ventana principal

    v0 = Tk() # Tk() Es la ventana principal
    v0.config(bg="white") # Le da color al fondo
    v0.geometry("300x300") # Cambia el tamaño de la ventana
    v0.title("Calculadora")
    v0.resizable(False, False)
    v0.config(bg="black") # Le da color al fondo
    b=0
    resul=0
    def sumar():
    b=1


    return True

    def restar():
    b=2
    return True

    def div():
    b=3
    return True
    def mult():
    b=4
    return True
    def raiz():
    b=5
    return True



    def ejecutar(f):
    v0.after(200,f)





    #funciones para tomar los clicks de cada número

    def click0():
    b=entrada.get()
    entrada.set(str(b)+"0")
    def click1():
    b=entrada.get()
    entrada.set(b+"1")
    def click2():
    b=entrada.get()
    entrada.set(b+"2")
    def click3():
    b=entrada.get()
    entrada.set(b+"3")
    def click4():
    b=entrada.get()
    entrada.set(b+"4")
    def click5():
    b=entrada.get()
    entrada.set(b+"5")
    def click6():
    b=entrada.get()
    entrada.set(b+"6")
    def click7():
    b=entrada.get()
    entrada.set(b+"7")
    def click8():
    b=entrada.get()
    entrada.set(b+"8")
    #showinfo("je","")

    def click9():
    b=entrada.get()
    entrada.set(b+"9")

    def click():
    #if sumar() or restar() or div() or mult() or raiz() ==True:

    num=(entrada.get())

    showinfo("title", type(num))
    entrada.set("")
    #float(num1)
    return num
    def borrar():
    entrada.set("")

    def resul():



    num1=click().num
    num2=entrada.get()
    resul=num1+num2
    entrada.set("")
    showinfo(num2, num1)
    if b==1:
    resul=num1+num2
    entrada.set(str(resul))
    showinfo(resul, resul)
    if b==2:
    resul=num1-num2
    entrada.set(str(resul))
    if b==3:
    resul=num1/num2
    entrada.set(str(resul))
    if b==4:
    resul=num1*num2
    entrada.set(str(resul))
    if b==5:
    resul=sqrt(num2)
    entrada.set(str(resul))





    #creo los botones y tamaños

    b0=Button(v0,text="0",width=15,command=click0)
    b1=Button(v0,text="1",width=6,command=click1)
    b2=Button(v0,text="2",width=6,command=click2)
    b3=Button(v0,text="3",width=6,command=click3)
    b4=Button(v0,text="4",width=6,command=click4)
    b5=Button(v0,text="5",width=6,command=click5)
    b6=Button(v0,text="6",width=6,command=click6)
    b7=Button(v0,text="7",width=6,command=click7)
    b8=Button(v0,text="8",width=6,command=click8)
    b9=Button(v0,text="9",width=6,command=click9)
    suma=Button(v0,text="+",width=6,command=sumar and click)
    resta=Button(v0,text="-",width=6,command=restar and click)
    mult=Button(v0,text="*",width=6,command=mult and click)
    div=Button(v0,text="/",width=6,command=div and click)
    raiz=Button(v0,text="√",width=6,command=raiz and click)

    igual=Button(v0,text="=",width=6,command=resul)
    punto=Button(v0,text=".",width=6)
    borrar=Button(v0,text="C",width=15,command=borrar)


    #caja de texto que recibe los números
    entrada =StringVar()
    a=Entry(v0, textvar=entrada,width=40)






    v0.mainloop()

    ResponderEliminar