Autor
|
Tema: Rellenar una caja de tkinter "Entry" sin botones (Leído 4,592 veces)
|
PUAROT
|
Muy buenas, a ver si soy capaz de explicarme bien Estoy intentando hacer una pequeña interface gráfica en tkinter y ando loco intentando que en un Entry (caja de texto ) aparezca el resultado de una operación pero sin botones. El siguiente código, coge el numero que le pongamos en la caja1 y cuando pulsamos el botón, rellena la caja2 con el resultado de la operación asignada. cada caja esta asignada a un IntVar diferente. Si yo asigno las dos cajas a una sola variable sin realizar operación ninguna, osea los dos Entry a un solo IntVar() lo que escribas en el primero se va actualizando y va apareciendo en el segundo, bien pues eso es lo quiero yo hacer, que se actualice conforme vaya escribiendo el numero en la primera caja vaya apareciendo en la segunda el resultado de la operación. He probado a ponerle al entry el update_idletasks() pero no ha servido o no se utilizarlo bien, he probado a poner ventana.update y tampoco Gracias de antemano ! from tkinter import *
#Ventana ventana = Tk() ventana.geometry("640x490")
#Variables var1= IntVar() var2= IntVar()
#Labels etiquetaBinario = Label(ventana,text="Numero",font= ("Times",16)).place(x=20,y=200) etiquetaOctal = Label(ventana,text="Convertido",font= ("Times",16)).place(x=20,y=240)
#Entry caja1 = Entry(ventana.update_idletasks(),textvariable=var1,width=24).place(x=110,y=200) caja2 = Entry(ventana.update_idletasks(),textvariable=var2,width=24,state=DISABLED).place(x=110,y=240) def cambio(): numero = var1.get() + 2 var2.set(numero)
boton1 = Button(ventana,text=" OK ", command=cambio ).place(x=350,y=350)
|
|
|
En línea
|
|
|
|
tincopasan
Desconectado
Mensajes: 1.286
No es lo mismo conocer el camino que recorrerlo.
|
no sé si entendí bien, ¿lo que buscas es que al escribir en el entry 1 se vaya viendo el resultado en el entry2? si es eso, modifique un poco tu script así lo probás.Por cierto seguro hay muchas formas de hacerlo, pero en este caso te muestro el método trace from tkinter import * def callback(var1): var2.set(int(var1.get())+2) ventana = Tk() ventana.geometry("640x490") var1 = StringVar() var1.trace("w", lambda name, index, mode, var1=var1: callback(var1)) var2 = StringVar() #Labels etiquetaBinario = Label(ventana,text="Numero",font= ("Times",16)).place(x=20,y=200) etiquetaOctal = Label(ventana,text="Convertido",font= ("Times",16)).place(x=20,y=240) #Entrys caja1 = Entry(ventana, textvariable=var1,width=24).place(x=110,y=200) caja2 = Entry(ventana,textvariable=var2,width=24,state=DISABLED).place(x=110,y=240) ventana.mainloop()
si no era eso, perdón, soy muy perro!con perdón de los perros. Saludos
|
|
|
En línea
|
|
|
|
PUAROT
|
Muchas gracias por la rapidez en contestar !!! Efectivamente es lo que quiero, pero estoy un poco desconcertado , en la documentación que tengo como por ejemplo http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/index.html no encuentro por ningún lado la existencia de ese trace() Me podrías indicar un sitio mas completo donde consultar la documentación de tkinter ? Por otra parte conozco la existencia de lambda pero es un concepto que no he llegado a entender ni a saber utilizar me lo podrías explicar? es mucho pedir? Muchas gracias !!!!
|
|
|
En línea
|
|
|
|
tincopasan
Desconectado
Mensajes: 1.286
No es lo mismo conocer el camino que recorrerlo.
|
soy muy malo explicando cosas que están recontra explicadas (hay toneladas de tutoriales), pero bueno, lo haré de la forma más simple que pueda. suponete este código: def cuadrado(): b=[] #lista vacia for x in a: #recorro cada uno de los elementos x= x*x # a cada elemento le doy el valor de multiplicarse por si b.append(x) #agrego a la lista vacia el valor obtenido print(b) cuadrado()
es totalmente entendible si sabés de funciones y listas que nos dará: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] pero... podríamos simplificarlo de muchas formas faciles, en este caso usaré map y lambda print(list(map(lambda x:x*x, a)))
que también dará: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] y que dice: list(paso a una lista) map(retorna cada valor de una lista y necesita 2 argumentos)1)una funcion, en este caso reemplazada por lambda que es una funcion de una sola linea! lambda x=nombre de la variable de cada elemento : x*x es la operación de cada uno a = la lista a leer algo muy simple pero es lo mismo: def suma(a,b): return a + b lambda a,b: a+b
insisto que hay demasiados tutoriales, busca en youtube y repetí cada uno hasta que veas como funciona. Con respecto a trace, es de python no de tkinter.
|
|
|
En línea
|
|
|
|
PUAROT
|
Muchas gracias otra vez :-)
Buscaré mas información de trace() en python para enterarme de que hace, como funciona y como se utiliza jejee
Las funciones y las listas si las entiendo, y he deducido que tienes una lista llamada a con numeros del 1 al 10 pero con respecto a lambda pues me ha quedado algo mas claro que antes, pero bajo mi punto de vista de un neófito, le quita mucha legibilidad al código, supongo que será como todo, cuando haya visto un millon... pero ahora mismo no pillo lo que hace lambda en la primera respuesta que me has dado
Ahora tocará hacer pruebas con el código y ver los posibles errores y resultados para ver si soy capaz de entenderlo y utilizarlo jejeje
Muchas gracias otra vez !
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
[SOURCE] "Shell Remota" con Python con GUI (Tkinter)
Scripting
|
Shrick
|
1
|
4,623
|
2 Enero 2009, 02:43 am
por _carlos_
|
|
|
Botones, botones y más botones: Facebook puede anunciar los "Leído", ....
Noticias
|
wolfbcn
|
0
|
2,195
|
20 Septiembre 2011, 13:24 pm
por wolfbcn
|
|
|
recursos visual basic, """"""proceso inmortal"""""
Análisis y Diseño de Malware
|
Dark4ngel
|
7
|
14,264
|
3 Noviembre 2011, 10:42 am
por Dark4ngel
|
|
|
"Duplicate sources.list entry" de medibuntu (SOLVED)
GNU/Linux
|
adgellida
|
8
|
7,528
|
3 Mayo 2012, 22:30 pm
por adgellida
|
|
|
Facebook presenta dos nuevos botones, "Lo Quiero" y "Coleccionar", con la ...
Noticias
|
wolfbcn
|
4
|
5,473
|
9 Octubre 2012, 18:53 pm
por m0rf
|
|