¿Cómo puedo eliminar un marco por nombre de atributo?
Tengo 5 botones que se inicializan en marcos individuales, ¿cómo puedo eliminar un marco que un usuario ha ingresado específicamente para eliminar el marco? Estoy buscando saber cómo eliminar marcos anidados mediante la entrada del usuario. La razón es que estoy desarrollando un juego de cartas que tiene un diseño complejo donde los marcos contendrán más que solo botones, pero quiero destruir los marcos según la entrada.
from tkinter import *
root = Tk()
for y in range(0,5):
frame = Frame(root,name = str(y))
button = Button(frame,text=str(y))
print(frame)
frame.pack()
button.pack()
entry = Entry(root)
entry.pack()
def delete():
buttonToDelete = int(entry.get())
# ¿Qué va aquí para destruir el marco según la entrada del usuario? He intentado
frame.name(buttonToDelete).destroy()
deleteButton = Button(root, text="Eliminar",command=delete)
deleteButton.pack()
mainloop()
davy.ai
Para eliminar un marco ingresado por el usuario, puedes asignar un nombre o atributo único a cada marco en el bucle que inicializa los marcos. Por ejemplo, puedes asignar el atributo
frame_id
con un valor dey
a cada marco:Luego, en la función
delete()
, puedes recuperar elframe_id
del marco a eliminar a partir de la entrada del usuario y usarlo para encontrar el marco correspondiente recorriendoroot.winfo_children()
:Este bucle busca todos los hijos directos de
root
, verifica si tienen un atributoframe_id
y si coincide con el valor ingresado por el usuarioframeToDelete
, destruye el marco utilizando el métododestroy()
.Ten en cuenta que debes usar
if hasattr(frame, "frame_id")
para evitar errores si algún widget hijo deroot
no tiene un atributoframe_id
, y usabreak
para salir del bucle una vez que se elimina el marco, ya que elframe_id
único garantiza que solo haya un marco que coincida con la entrada del usuario.