2013-04-03 5 views
19

Sto provando a cancellare un frame nel tkinter in modo che i nuovi contenuti possano essere scritti (informazioni di aggiornamento) ma non sono riuscito a farlo. Sono a conoscenza di questiPython Tkinter che cancella un frame

frame.destroy() 
frame.pack_forget() 
frame.grid_forget() 

ma frame.destroy() rimuoverà completamente il frame. E gli altri due non potrebbero darmi il risultato che voglio. Quello che mi serve è solo per deselezionare tutti gli elementi nel frame, ma il frame stesso rimarrà. C'è modo di farlo?

+2

in base all'attività è possibile creare un frame nel frame e distruggere quello – User

risposta

15

pack_forget e grid_forget rimuoveranno solo i widget dalla vista, non li distrugge. Se non hai intenzione di riutilizzare i widget, la tua unica vera scelta è distruggerli con il metodo destroy.

Per fare ciò hai due possibilità: distruggerli singolarmente o distruggere il fotogramma che causerà la distruzione di tutti i suoi figli. Quest'ultimo è generalmente il più semplice e più efficace.

Poiché si asserisce di non voler distruggere la cornice del contenitore, creare una cornice secondaria. Avere questo frame secondario essere il contenitore per tutti i widget che si desidera eliminare e quindi inserire questo frame all'interno del genitore che si fa non desidera distruggere. Quindi, si tratta solo di distruggere questo frame e tutti i widget interni verranno distrutti insieme ad esso.

+0

Sono riuscito a risolvere il mio problema creando una funzione che ricreerà il frame che voglio chiarire ogni volta che voglio che aggiorni. Grazie mille per il tuo aiuto Bryan, la tua risposta è stata informativa. –

+0

@Chris Aung: ti dispiacerebbe condividere questa funzione? Sto cercando proprio questo, perché il mio fallisce per qualche motivo. – Zelphir

+0

Qui puoi trovare un metodo, che funziona: http://stackoverflow.com/a/15995920/1829329 – Zelphir

25

http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/universal.html

w.winfo_children()
restituisce una lista di tutti i figli di w, nella loro ordine di sovrapposizione dal più basso (in basso) al più alto (in alto).

for widget in frame.winfo_children(): 
    widget.destroy() 

distruggerà tutti i widget nella vostra struttura. Non c'è bisogno di un secondo fotogramma.