[Python] Tkinter básico - eventos

Iniciado por Mitgus, 18 Junio 2013, 17:00 PM

0 Miembros y 1 Visitante están viendo este tema.

Mitgus

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.

Código (=python) [Seleccionar]

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):

Código (=java) [Seleccionar]

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:

Código (=python) [Seleccionar]

>>>
resta
>>>



¿Algún entendido que pueda ayudarme?

Gracias.
Linux User #560388

Mitgus

Bueno, ya lo solucioné.

La cosa era con un lamba, de este modo:

Código (=python) [Seleccionar]
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

Código (=python) [Seleccionar]

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
Linux User #560388