Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Refrescar un treeview luego de modificar un Ítem (tkinter)
#1
Francisco, por mas que busco no encuentro un “refresh” para un treeview,
la consulta es ¿la única manera es borrar todo el contenido y cargarlo nuevamente?.-
Te dejo el código por las dudas y te aclaro que me faltan modificar los campos
“descripción” y “monto” pero como no me funciona.-

Código:
def editarItem(mv, varFecha, varDescripcion, varMonto, ventanaEditar):
    if len(varFecha.get()) == 10 and len(varDescripcion.get()) >= 1:
        try:
            datetime.strptime(varFecha.get(), '%d/%m/%Y')
        except:
            mensaje = " La FECHA no es válida..."
            messagebox.showerror(message=mensaje, title="Error.", parent=ventanaEditar)
        else:
            item = mv.selection()[0]
            text = mv.item(item, option="text")
            data = mv.item(item)
            data["values"][0] = varFecha.get()
            final = f"{text},{varFecha.get()},{varDescripcion.get()},{varMonto.get()}\n"
            with codecs.open('BDsuper.txt', 'r', encoding='utf-8') as archivo:
                 with codecs.open('tmp.txt', 'w', encoding='utf-8') as f:
                     for linea in archivo:
                         posicion = linea.find(',')
                         codigo = linea[0:int(posicion)]
                         if text != codigo:
                             f.write(linea)
                         else:
                             f.write(final)

            os.remove('BDsuper.txt')
            os.rename('tmp.txt', 'BDsuper.txt')
           
            ventanaEditar.destroy()
            mv.focus()
    else:
        mensaje = "              --------------- Ayuda ---------------\n"\
                  "\n"\
                  " El campo FECHA y el campo DESCRIPCION tienen que\n"\
                  " contener datos y la fecha debe ser válida..."
        messagebox.showerror(message=mensaje, title="Error.", parent=ventanaEditar)
   
    return True       



Slds. Daniel ☕☕☕
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Responder
#2
Hola, Daniel.

Supongo que esa lista en data["values"] es de solo lectura. Deberías volverla a asignar al item luego de alterarla:

  1. data["values"][0] = varFecha.get()
  2. mv.item(item, values=data["values"])


La primera columna deberías refrescarla aparte así:

  1. mv.item(item, text=nuevo_texto)


No lo probé, pero estoy casi seguro de que funciona. Avisame cómo te fue.

Saludos
Responder
#3
Francisco, se actualiza pero me da este error, es evidente que
"nuevo_texto" no esta definido.-
Te lo paso en crudo, lo copie y no analice nada, ahora lo voy hacer,gracias.-


Cita:Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\Daniel Virgili\AppData\Local\Programs\Thonny\lib\tkinter\__init__.py", line 1705, in __call__
    return self.func(*args)
  File "C:\Users\Daniel Virgili\Desktop\Python\Super\Editar.py", line 61, in editarItem
    mv.item(item, text=nuevo_texto)
NameError: name 'nuevo_texto' is not defined

PD: Eliminando la última línea parece funcionar correctamente.
Slds. Daniel ☕☕☕
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Responder
#4
Claro, el "nuevo_texto" era una sola variable de ejemplo. En tu caso supongo que sería el código de la fila (según la imagen que subiste en el otro tema). Como sea, supongo que el código no es algo editable en tu programa así que no haría falta esa línea para actualizar la primera columna.

Saludos
Responder
#5
Perfecto, sin mas actualiza cualquiera de los campos y como vos
decís el código no es modificable, abrazo y muchas gracias x tu tiempo.-
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)