Domanda

Voglio solo l'equivalente di chiudere e riaprire il mio principale del programma.Voglio richiamare quando un "nuovo"-come opzione da un menu a discesa viene cliccato.Qualcosa come la chiamata di root.destroy() e poi ri-iniziare il mainloop.

Come posso ottenere questo risultato?

È stato utile?

Soluzione

Si potrebbe prendere tutta la tua logica edificio GUI e il codice stato iniziale fuori dal ciclo principale e metterlo in funzione. Chiamare queste funzioni dal mainloop (qualcosa come: buildgui () e initstate ()) e poi, quando l'utente fa clic sull'icona del menu, basta chiamare initstate () per impostare nuovamente come se fosse la prima volta che ha iniziato l'applicazione

Altri suggerimenti

Ci sono almeno tre modi per risolvere questo problema.

Metodo uno: il capo falso.Quando si crea la tua app, non mettere tutti i widget nella finestra principale.Invece, nascondere la finestra principale e creare un nuovo toplevel che rappresenta la vostra applicazione.Quando si riavvia è solo una questione di distruggere che di nuovo toplevel e ri-esecuzione di tutte le start-up logica.

Metodo due: nuke e stesa.Concetto simile ma leggermente diverso in esecuzione.In questo modello, quando si desidera riavviare semplicemente eliminare tutti gli oggetti nella finestra principale, ripristinare la geometria null (in modo che la finestra sarà ancora una volta ridimensionata in base al suo contenuto) e quindi eseguire la logica che attira tutti gli altri widget.

Metodo tre: se non ha funzionato la prima volta... Come suggerito da Martino v.Löwis, basta avere il programma exec una nuova istanza del programma, poi esci.

I primi due metodi sono potenzialmente più veloce e il (dis?)il vantaggio di preservare l'ambiente corrente.Per esempio, si potrebbe salvare la copia di appunti, la larghezza delle colonne, etc.Il terzo metodo è una garanzia assoluta di una tabula rasa.

Se siete su Unix, riavviare l'intera applicazione con os.execv. Assicurati di passare tutti gli argomenti della riga di comando, ecc.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top