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
public void actionPerformed(ActionEvent evento)
{
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.
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