[TKINTER] Uso de StringVars (Re: Disculpas)

Chema Cortes py en ls-l.org
Jue Ago 4 10:17:17 CEST 2005


[[Hago copia a python-es, ya que puede interesar a álguien más]]


Martha Lucía Gallego López escribió:

> Te cuento que he intentado abrir el tutorial de python pero me dice
> que no puede encontrar la pagina.

Vuelve a probar, porque la página está ahí:
http://pyspanishdoc.sourceforge.net/tut/node8.html

También está en inglés en:
http://docs.python.org/tut/node8.html


> En cuanto a lo que me habia dicho de que usara
> "promedios.resumen_promedios" no me funciona corre pero no muestra
> nada, que será lo que pasa o que estare haciendo mal.

"promedios" es el nombre del módulo
"resumen_promedios" es una función dentro del módulo
Para ejecutar la función: promedios.resumen_promedios(dato1,dato2)


> De otra parte, no he podido hacer la resta entre los entries. Vuelvo a
> enviar código para ver si usted puede orientarme por favor en como
> debe ser el procedimiento:
> 
> root=Tk()
> cuadro1=FloatEntry(root)
> cuadro1.pack()
> cuadro2=FloatEntry(root)
> cuadro2.pack()
> def calcular():
>       resultado=cuadro2-cuadro1
>      print resultado
> 
> cuadro3=FloatEntry(root)
> cuadro3.pack()
> cuadro3.set(calcular(cuadro1.get(), cuadro2.get()))
> root.mainloop()

En mi mensaje te contaba que tenías que usar StringVars, y no veo que
las uses por ningún sitio. La resta es entre los valores de las
StringVars, no entre la Entries.

Como un ejemplo sin refinar demasiado:


from Tkinter import *

def recalcula(name,index,mode):
    a=v1.get()
    if a.isdigit():
        a=int(a)
    else:
        v1.set(0)
        a=0

    b=v2.get()
    if b.isdigit():
        b=int(b)
    else:
        v2.set(0)
        b=0

    c=a-b
    v3.set(c)

    print "%d - %d = %d"%(a,b,c)


root=Tk()

v1=StringVar()
v1.set(str(0))
v2=StringVar()
v2.set(str(0))
v3=StringVar()
v3.set(str(0))

v1.trace_variable("w",recalcula)
v2.trace_variable("w",recalcula)


cuadro1=Entry(root,textvariable=v1)
cuadro1.pack()
cuadro2=Entry(root,textvariable=v2)
cuadro2.pack()

cuadro3=Entry(root,textvariable=v3)
cuadro3.pack()

root.mainloop()



La mejor forma de trabajar con Tkinter es creando nuevas clases donde
agrupar todas estas variables y traces. Por ejemplo, mira como lo hacen
aquí para implementar IntegerEntries:
http://effbot.org/zone/tkinter-entry-validate.htm


PD: por favor, sigue usando la lista ya que ésta es una época propicia
para desparecer por unos días y podrías estar esperando respuesta
inútilmente.




Más información sobre la lista de distribución Python-es