Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Actualizar values de combobox tkinter.
#1
Buenos días a todos.

Tengo un desarrollo dividido en vista y modelo.

En la vista, tengo lo siguiente:

prov_combo = ttk.Combobox(pesta0, textvariable=de_proveedor)
prov_combo["values"] = proveedores.leer_id_proveedor()


Y en el modelo, la función:

def leer_id_proveedor():
    cursor = base.cursor()
    query = "SELECT id FROM proveedores"
    cursor.execute(query)
    data=[]
    for row in cursor:
        data.append(row[0])
    return(sorted(data))

El problema que se me presenta es que, al agregar un nuevo valor al combobox, el mismo no se ve reflejado en la vista (o sea, no se refresca, no aparece el nuevo).

He probado con:

* agregar la función leer_id_proveedor() dentro y al pie de la función que uso para agregar values, para que una vez que se realice la carga, se ejecute la lectura.
* agregar un botón de actualizar que llame a  leer_id_proveedor()
* hacer una llamada a la función leer_id_proveedor() dentro de la vista, de manera suelta, para ver si lograba que se ejecute en loop.

pero ninguna de estas opciones me dieron resultado.

Quiero evitar que el usuario tenga que cerrar y volver a abrir el programa para poder seleccionar el valor nuevo dentro del combo. ¿Hay manera de hacerlo?
Responder
#2
Hola, Diego.

¿Cómo estás agregando un nuevo valor al combobox? ¿Se agrega también a la tabla de proveedores en tu base de datos?

Saludos
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
Responder
#3
Correcto, Francisco, se agrega a la tabla.

Copio aquí debajo la función:

def guardar_proveedor(proveedor, cuit, tipo_proveedor, dire, localidad, repre, fono, mail, web, dto, env, c_min, obs):

    cursor = base.cursor()
    data = (proveedor, cuit, tipo_proveedor, dire, localidad, repre, fono, mail, web, dto, env, c_min, obs)

    sql = "INSERT INTO proveedores (proveedor, cuit, tipo_proveedor, dire, localidad, repre, fono, mail, web, dto, env, c_min, obs) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
    cursor.execute(sql, data)
    base.commit()

Saludos.
Responder
#4
Entonces luego de llamar a esa función deberías hacer nuevamente

Código:
prov_combo["values"] = proveedores.leer_id_proveedor()

para actualizar los datos del combo.
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
Responder
#5
Ahhhhhh. No era la llamada a la función leer_id_proveedor() sino vincularla al ttk.combobox (prov_combo["values"] = leer_id_proveedor()) dentro y al pie de la función.
Ahora sí, funcionó.
Muchas gracias Francisco.
Responder
#6
Un placer Wink
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)