Python: eliminando un marco TKinter

Quiero eliminar un marco de mi interfaz cuando se hace clic en un botón específico.

Esta es la función de callback invocada

def removeMyself(self): del self 

Sin embargo, no se elimina. Probablemente estoy eliminando el objeto en Python sin actualizar la interfaz.

Gracias

Actualizar

 self.itemFrame = tk.Frame(parent) self.itemFrame.pack(expand=False, side=tk.TOP) removeB = tk.Button(self.itemFrame, text="Remove", width=10, command=self.removeIsosurface) def removeIsosurface(self): self.itemFrame.Destroy() 

Mensaje de error:

 AttributeError: Frame instance has no attribute 'Destroy' 

Para eliminar, llame a frm.pack_forget() o frm.grid_forget() dependiendo de si el marco fue empaquetado o en cuadrícula.

Luego llame a frm.destroy() si no lo va a usar de nuevo, o retenga la referencia y vuelva a empaquetar o regreder cuando desee volver a mostrarlo.

del no borra nada. del something simplemente elimina something del ámbito local. Y aunque si something fuera la única referencia a un objeto, puede permitir que el objeto se recoja en el futuro, ¡ni siquiera piense en usar del para eliminar objetos! Y como self es solo una variable normal, del self no hace nada, excepto que, por supuesto, impidiendo que el rest del método acceda a la instancia (de modo que al final del método, en realidad es como pass ).

La forma exacta de eliminar un widget de la GUI depende de qué administrador de geometría utilice. Si usó .grid() , puede usar .grid_forget() . Tenga en cuenta que esto todavía no destruye el widget, por el contrario, puede continuar y .grid() nuevamente. – Pero eso no hace ninguna diferencia.

Esto no ayuda: self.destroy()

chk esto: libro de cocina PY el último párrafo

Digamos que estás haciendo una clase. Tienes que hacer un par de cosas especiales aquí:

  • El marco que quieres destruir tiene que ser una variable de instancia
  • Tienes que escribir una callback (lo que hiciste)

Entonces, aquí está cómo se vería un prototipo básico.

 from Tkinter import Tk, Frame, Button, Label class GUI: def __init__(self, root): self.root = root # root is a passed Tk object self.button = Button(self.root, text="Push me", command=self.removethis) self.button.pack() self.frame = Frame(self.root) self.frame.pack() self.label = Label(self.frame, text="I'll be destroyed soon!") self.label.pack() def removethis(self): self.frame.destroy() root = Tk() window = GUI(root) root.mainloop() 

¡Feliz cacería!