Mensajes: 155
Temas: 57
Registro en: Jan 2018
Reputación:
0
22-03-2022, 06:15 PM
(Última modificación: 24-03-2022, 07:54 PM por Francisco.)
Hola Francisco, ¿Cómo estas?, hola gente.-
Estoy un poco lidiado con este tema y x mas que busco en tu blog,
practico, pero no logro el resultado esperado.-
Te comento(se entiende mejor en el recorte de pantalla) con un botón
tengo que borrar un ítem del treeview pero no se como buscarlo,
¿ cómo lo hago?.-
Desde ya gracias porque confío mucho en tus respuestas.-
https://postimg.cc/gnvXR5v5
Slds. Daniel ☕☕☕
Si es algo similar a esto, ya esta, me lo habías enseñado en otro hilo, perdón.-
Código: def borrar(mv, parametros):
try:
item = mv.selection()[0]
except IndexError:
messagebox.showwarning(message="Debe seleccionar un elemento.",
title="No hay selección")
else:
mv.delete(item)
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.-
Mensajes: 1.300
Temas: 3
Registro en: Feb 2016
Reputación:
71
Hola, Daniel, ¿cómo estás?
¿Pudiste solucionarlo con ese código? Eso serviría para borrar el elemento seleccionado. Si querés eliminar algún otro item, tenés que guardar previamente la referencia al mismo al momento de insertarlo. La función insert() del treeview devuelve una cadena que funciona como referencia a cada item que se inserta, y es precisamente lo que necesita el método delete() para borrar un item. Una práctica adecuada sería, luego de cada insert(), agregar el ID del item a una lista que refleje exactamente los ID de todos los items en el treeview.
Saludos
Mensajes: 6
Temas: 2
Registro en: Mar 2022
Reputación:
0
23-03-2022, 09:10 PM
(Última modificación: 23-03-2022, 10:33 PM por Francisco.)
Hola.
Buscando nformacon para mi problema, me encontre con esto que me llamo la atencion.
Si no es un atrevimiento de mi parte y con el afan de ayudar, tengo un programa que hace busquedas en una tabla (TREEVIEW).
Aqui te lo pongo (pego) y si deseas alguna aclaratoria, estoy a la orden y con mucho gusto.
Código: ## Esta funcion verifica si el concepto que se trata de incluir ya existe en la tabla
## (TREEVIEW), de ser asi se procede a modificar sus datos
def elconceptoexisteenlatabla (concepto):
global tabla, secuencia
if secuencia == 0: return False, 0 ## la tabla esta vacia
for item in tabla.get_children():
valores = tabla.item(item)['values']
# print ('item:',item,'valores:',valores)
con = tabla.item(item,'text') ## str(valores[0]).rjust(3,'0')
# print ('elconceptoexisteenlatabla:',con,type(con),'concepto:',concepto)
if con == concepto:
# print ('se consiguio el concepto',con,concepto)
return True, item
return False, 0
Espero que te ayude.
Un saludo
Mensajes: 155
Temas: 57
Registro en: Jan 2018
Reputación:
0
Cita:¿Pudiste solucionarlo con ese código? Eso serviría para borrar el elemento seleccionado.
Si querés eliminar algún otro item, tenés que guardar previamente la referencia al mismo
al momento de insertarlo. La función insert() del treeview devuelve una cadena que
funciona como referencia a cada item que se inserta, y es precisamente lo que necesita
el método delete() para borrar un item. Una práctica adecuada sería, luego de cada insert(),
agregar el ID del item a una lista que refleje exactamente los ID de todos los items en el treeview.
No te darás una idea del barullo que tengo con este tema que hace mas de una semana
que me da “vueltas” en la cabeza y no se como preguntarte.-
Lo voy a intentar, si te parece que cometo una infantilismo discúlpame.-
Si yo tengo una base de datos con 100 registros correlativos(o no) seguramente me
resultara un tanto fácil encontrar el registro deseado, pero si tengo un treeview y esto
como referencia, ¿me podes decir como lo busco?.-
---------------------------------
I001 I00B I015
I00C I002 I016
I00D I003 I017
I00E I004 I018
I00F I005 I019
I010 I006 I01A
I011 I007 I01B
I012 I008 I01C
I013 I009 I01D
I014 I00A I01E
---------------------------------
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.-
Mensajes: 1.300
Temas: 3
Registro en: Feb 2016
Reputación:
71
Hola, Daniel.
Si en la lista tenés solo guardado el ID, no va a ser posible realizar una búsqueda. Deberías guardar, además del ID, también el resto de los datos. Pero eso implicaría duplicar los datos en memoria (porque los tendrías en tu lista y a su vez Tk los tendría en la memoria del treeview). La solución que dejó Francisco (el otro Francisco) me parece más adecuada. Con un bucle recorrés los items hasta encontrar el que estás buscando. Por ejemplo, si hacés una búsqueda por fecha, y querés borrar todos los items con fecha 28/04/2021, deberías hacer algo así:
Código: for item_id in treeview.get_children():
columnas = treeview.item(item_id)["values"]
if columnas[0] == "28/04/2021":
treeview.delete(item_id)
Saludos
Mensajes: 155
Temas: 57
Registro en: Jan 2018
Reputación:
0
Hola, buen día para todos.
Gracias Francisco, es eso exactamente lo que buscaba(lo guarde en un cofre) .-
Justamente en el programa que estoy haciendo hay una búsqueda y como
desconocía esta manera la efectuaba desde el .txt(BD) directamente.-
Dejo esta práctica por si alguno le resulta útil…
Código: import tkinter as tk
from tkinter import ttk
from tkinter import *
import codecs
from functools import partial
import time
def centrarVentana(ventana):
ancho_ventana = 550
alto_ventana = 500
x_ventana = ventana.winfo_screenwidth() // 2 - ancho_ventana // 2
y_ventana = ventana.winfo_screenheight() // 2 - alto_ventana // 2
posicion = str(ancho_ventana) + "x" + str(alto_ventana) + "+" + str(x_ventana) + "+" + str(y_ventana)
ventana.geometry(posicion)
ventana.resizable(0,0)
def crearTrw(registros):
with codecs.open('BDsuper.txt', 'r', encoding='utf-8') as archivo:
for linea in archivo:
tmpLinea = linea.strip()
linea = tmpLinea.split(',')
registros.append(linea)
return registros
def busqueda(mv):
fInicio = time.strptime("28/04/2021", "%d/%m/%Y")
fTope = time.strptime("28/05/2021", "%d/%m/%Y")
for item_id in mv.get_children():
columnas = mv.item(item_id)["values"]
fmv = time.strptime(columnas[0], "%d/%m/%Y")
if fmv >= fInicio and fmv <= fTope:
final = f"{columnas[0] } {columnas[1]} {columnas[2]}"
print(final)
def main():
root = tk.Tk()
root.title(" Cuenta corriente del Súper.")
centrarVentana(root)
# Creando las columnas.
mv = ttk.Treeview(root, columns=("col1", "col2", "col3"))
mv.column("#0", width=6, anchor=SE)
mv.column("col1", width=10, anchor=CENTER)
mv.column("col2", width=50, anchor=NW)
mv.column("col3", width=10, anchor=CENTER)
# Poniendo en nombre a las columnas.
mv.heading("#0", text="Código", anchor=CENTER)
mv.heading("col1", text="Fecha", anchor=CENTER)
mv.heading("col2", text="Descripción", anchor=CENTER)
mv.heading("col3", text="Monto", anchor=CENTER)
# Poner todos los registros en una lista.
registros = []
crearTrw(registros)
# Poner todos los registros en el treeview.
for reg in registros:
item = mv.insert("", END, text=reg[0], values=(reg[1], reg[2], reg[3]))
registros.clear()
# posicionar el "Treeview" y creando el "Scrollbar".
ejscrollbar= ttk.Scrollbar(root,orient=VERTICAL,command=mv.yview)
ejscrollbar.pack(side='right',fill='y')
mv.configure(yscrollcommand=ejscrollbar.set)
mv.place(x=15, y=10, height=350,width=500)
# Botón <Buscar>
botonBuscar = ttk.Button(root, text="Buscar",
command=partial(busqueda, mv))
botonBuscar.place(x=230, y=400, width=80, height=40)
mv.focus()
root.mainloop()
main()
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.-
Mensajes: 1.300
Temas: 3
Registro en: Feb 2016
Reputación:
71
Excelente, Daniel.
Saludos!
|