Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Las variables no se imprimen por pantalla ni se me almacenan los datos
#1
Hola, llevo poco tiempo en Python y estoy realizando un mini proyecto en el que introduzco una serie de datos en una ventana generada con Tkinter y al pulsar en el botón enviar deberían imprimirse los datos por pantalla y almacenarse en una base de datos localhost.

El problema es que al pulsar el botón no se me imprimen las variables por pantalla ni se me almacenan en la base de datos. Lo único que ocurre es que en la base de datos se me añade un registro pero todos los campos están vacíos excepto el id, que lo tengo en autoincremento (La base de datos es en MySQL)


Código:
import pymysql
import tkinter

ventana = tkinter.Tk()
def conexiondb():
    #Conexion
    db = pymysql.connect("localhost", "root", "", "prueba")
    cursor = db.cursor()
    try:
        cursor.execute("INSERT INTO usuarios (usuario, email, contraseña) VALUES (%s, %s, %s)",  (usuariodb, emaildb, contraseñadb))
        print("Hecho")
    except:
        print ("Error")
    #Guardar cambios
    db.commit()
    #Cerrar conexion
    db.close()
I=tkinter.StringVar()
U=tkinter.StringVar()
E=tkinter.StringVar()
C=tkinter.StringVar()
#Mostrar widgets
idd = tkinter.Entry(textvariable=I)
usuario = tkinter.Entry(textvariable=U)
usuario.pack()
email = tkinter.Entry(textvariable=E)
email.pack()
contraseña = tkinter.Entry(textvariable=C)
contraseña.pack()

#Guardar lo escrito
iddb = I.get()
usuariodb = U.get()
emaildb = E.get()
contraseñadb = C.get()
print(iddb)
print(usuariodb)
print(emaildb)
print(contraseñadb)

btnenviar = tkinter.Button(text="Enviar", command=conexiondb)
btnenviar.pack()
ventana.mainloop()
Responder
#2
Hola, bienvenido.

El problema es que este código:

  1. #Guardar lo escrito
  2. iddb = I.get()
  3. usuariodb = U.get()
  4. emaildb = E.get()
  5. contraseñadb = C.get()
  6. print(iddb)
  7. print(usuariodb)
  8. print(emaildb)
  9. print(contraseñadb)


Debería ir en el mismo lugar donde ejecutás la consulta (o sea, en tu función conexiondb). Tené en cuenta que la ventana no va a aparecer hasta que llames a la función mainloop(); por ende, si intentás acceder al contenido de las cajas de texto (usuario, email, etc.) antes de que aparezca la ventana, va a estar siempre vacío.

Esto es algo que hay que tener en cuenta siempre en Tk: cada vez que el usuario hace un cambio en alguna de las cajas de texto, tus variables usuariodb, emaildb, etc., no se van a actualizar automáticamente, sino que tenés que explícitamente volver a obtener el contenido.

Saludos
Responder
#3
Muchas gracias. Lo probaré a ver si funciona
Funciona perfectamente, gracias de nuevo
Responder
#4
De nada Wink
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)