Foros Python

Versión completa: Mostrar los datos seleccionados de un treeview en otra ventana.
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Hola gente, hola Francisco ¿ cómo están?, les cuento lo que me ocurre,
tengo una ventana principal donde cuentos con los movimientos de una
caja de ahorro en 3 entry(fecha, detalle, monto y código que no lo muestro)
con el botón <Buscar> muestro un treeview con todos los movimientos
y con un botón(en la  ventana del treeview) <Mostrar> quiero que al
seleccionar me muestre el ítem en la ventana principal, ¿Cómo hago para lograrlo?

Código:
def seleccionar(mv, parametros):
    try:
        item = mv.selection()[0]
    except IndexError:
        messagebox.showwarning(message="Debe seleccionar un elemento.",
            title="No hay selección")
    else:
        text = mv.item(item, option="text")
        messagebox.showinfo(message=text, title="Selección")

Esto lo saque de tu tutorial, funciona muy bien pero me muestra solamente el código
y yo necesito guardar en una tupla los 4 campos para así modificar el contenido de la
pantalla principal.-
Bueno dejo 2 recortes de pantalla para que se entienda mejor.-

Por las dudas dejo esta parte del código porque me pareció que esto me serviría,
pero no se como implementarlo, el insert de mi código es distinto.

Código:
my_iid = "id_unico"
treeview.insert("", tk.END, text="Elemento 1", iid=my_iid)

Código:
    for mov in tmp:
        debeHaver = mov[3]
        if float(mov[3]) > 0:
            item = mv.insert("", END, text=mov[0], values=(mov[1], mov[2], "0.00 ", debeHaver))
        else:
            item = mv.insert("", END, text=mov[0], values=(mov[1], mov[2], debeHaver, "0.00 "))

https://postimg.cc/7GnqdwxB
https://postimg.cc/dZRZ5zXv

Slds. Daniel ☕☕☕
Hola, Daniel, ¿cómo estás?

Cambiá esta línea:

Código:
text = mv.item(item, option="text")

por:

Código:
data = mv.item(item)

De esta manera recibís en data un diccionario con todas las columnas del elemento seleccionado. Luego tirar esos datos en los controles de la ventana principal no debería ser problemático. Si no tenés referencias a esos controles (porque están en otro archivo o algo por el estilo), podés usar functools.partial() como te había mencionado en alguna otra ocasión (acá hay un ejemplo).

Saludos
Hola Francisco, muy bien, tanto renegar y con cambiar una línea todo solucionado, gracias.-
Aprovecho para consultarte, ¿te paso alguna vez que la segunda vez que pulsas un botón
no hace lo esperado?, invoca a la función pero la segunda vez no cierra la ventana.-
Te dejo la función y si no entendes lo de “parametros” es que tengo la particularidad de poner
todos los parámetros en una lista.-

Código:
def seleccionar(mv, parametros):
    try:
        item = mv.selection()[0]
    except IndexError:
        messagebox.showwarning(message="Debe seleccionar un elemento.",
            title="No hay selección")
    else:
        data = mv.item(item)
        parametros[0].set(data["values"][0])
        parametros[1].set(data["values"][1])
        if float(data["values"][2]) < 0:
            parametros[2].set(data["values"][2])
        else:
            parametros[2].set(data["values"][3])
       
        parametros[10][0] = data["text"]
        parametros[10][1] = data["values"][0]
        parametros[10][2] = data["values"][1]
        parametros[10][3] = data["values"][2]

        parametros[14].destroy()
   
    return True 

Slds. Daniel ☕☕☕
Hola, Daniel.

¿No arroja ningún error la segunda vez que lo presionás? Tal vez en parametros[14] tenés una referencia vieja a una ventana que ya no existe.

Saludos
Hola Francisco, feliz Domingo, lo único que encuentro es que pongo:
--------------------------------------------
parametros.append(ventanaBus)
-------------------------------------------- 
y luego aparece:
-------------------------------------------- 
al inicio  !toplevel
En la función .!toplevel
--------------------------------------------
Debe ser correcto ¿no?

En cuanto a lanzar un error todo lo contrario, me fijo en la ventana
principal y los datos seleccionado aparecen instantáneamente.-

Slds. Daniel ☕☕☕
Bueno con una manera que desconocía pero lo solucione,
cierro la ventana desde el mismo botón y no desde la función.-

--------------------------------------------------
command= lambda:[seleccionar(mv, parametros), ventanaBus.destroy()])
--------------------------------------------------

Slds. Daniel ☕☕☕
Excelente, Daniel.

Saludos