Título: [Python] Tkinter básico - eventos
Publicado por: Mitgus en 18 Junio 2013, 17:00 pm
Hola compañeros. Soy novato en Python, me parece un lenguaje interesante por lo que estoy aprendiendo a programar con él. Ayer empecé con Tkinter, y todo bien, lo único que no logro es hacer que un botón llame a una función para que muestre un resultado. from tkinter import * def operar(operacion): if(operacion == "suma"): print(operacion) lbl = Label(root,text="Total: "+str(a.get()+b.get())) lbl.grid(row=3,column=0) elif (operacion == "resta"): print(operacion) lbl = Label(root,text="Total: "+str(a.get()-b.get())) lbl.grid(row=3,column=0) root = Tk() a = IntVar() b = IntVar() txtA = Entry(root, textvariable=a, width=15) txtB = Entry(root, textvariable=b, width=15) btnSumar = Button(root, text="Sumar", command=operar("resta"), width=15) txtA.grid(row=0,column=0) txtB.grid(row=1,column=0) btnSumar.grid(row=2,column=0) root.mainloop()
Lo que quiero hacer es algo así (Java): public class Hola { void calcula (String operacion ) { int numero1 = Integer. parseInt(textbox1. getText()); int numero2 = Integer. parseInt(textbox2. getText()); if(operacion.equals("suma") { labelResultado. setText(String. valueOf(numero1 +numero2 )); else if (operacion.equals("resta") { labelResultado. setText(String. valueOf(numero1 -numero2 )); // así con multiplicación y división } // evento del boton { Objet item = (String) combobox. getSelectedItem(); calcula(item) }
Cuando corro el programa, llama explícitamente a la función operar, si que haya presionado el botón. Esto sale por la terminal al ejecutar el script: >>> resta >>>
¿Algún entendido que pueda ayudarme? Gracias.
Título: Re: [Python] Tkinter básico - eventos
Publicado por: Mitgus en 18 Junio 2013, 23:34 pm
Bueno, ya lo solucioné. La cosa era con un lamba, de este modo: boton = Button(root, text="Calcular",command=lambda: operar("parametro"), width=15)
Minicalculadora por si a algún novato como yo le sirve.. Encontrar info de tkinter actual solo se encuentra en inglés xD from tkinter import * #importa el modulo grafico from tkinter import ttk # importa elementos (widgets) from tkinter import messagebox #importa messagebox def operar(): error = False # sera el control de la operacion texto = str(combo.get()) # extraemos el item seleccionado # de acuerdo a la opcion escogia, se realiza una operacion if(texto == "Sumar"): lbl = Label(root,text="Total: "+str(a.get()+b.get())) elif(texto == "Restar"): lbl = Label(root,text="Total: "+str(a.get()-b.get())) elif(texto=="Multiplicar"): lbl = Label(root,text="Total: "+str(a.get() * b.get())) # hacemos un try - catch (si se divide entre 0) else: try: lbl = Label(root,text="Total: "+str(round(a.get() / b.get(),2))) except: messagebox.showerror("Error","No es posible la división entre 0") error = True # avisamos que hay error # si no hay error, se muestra el resultado if(error==False): lbl.grid(row=4,column=0) root = Tk() #crea la ventana a = DoubleVar() #maneja el tipo de dato que se usara b = DoubleVar() txtA = Entry(root, textvariable=a, width=15) #configuramos los textbox txtB = Entry(root, textvariable=b, width=15) # agregamos elementos al combo combo = ttk.Combobox(root,value=('Sumar','Restar','Multiplicar','Dividir'), takefocus=0) combo.grid(row=3,column=0) # creamos el boton y configuramos su accion (command = 'funcion') btnSumar = Button(root, text="Calcular", command=operar, width=15) txtA.grid(row=0,column=0) txtB.grid(row=1,column=0) btnSumar.grid(row=2,column=0) root.mainloop() #maneja todo lo que ocurre
|