2009-09-10 15 views
34

Conosci un modo intelligente per nascondere o in altro modo di eliminare la finestra radice che appare, aperta da Tk()? Mi piacerebbe solo usare una normale finestra di dialogo.Come faccio a sbarazzarmi della finestra root di Python Tkinter?

Devo saltare la finestra di dialogo e inserire tutti i miei componenti nella finestra principale? È possibile o desiderabile? O c'è una soluzione più intelligente?

+4

Il collegamento dell'immagine non è valido. –

risposta

47

Probabilmente la stragrande maggioranza delle applicazioni basate su tk inserisce tutti i componenti nella finestra radice predefinita. Questo è il modo più conveniente per farlo poiché esiste già. Scegliere di nascondere la finestra predefinita e crearne di nuovi è una cosa perfetta da fare, anche se richiede solo un piccolo lavoro extra.

per rispondere alla tua domanda specifica su come nasconderlo, utilizzare il metodo withdraw della finestra principale:

import Tkinter as tk 
root = tk.Tk() 
root.withdraw() 

Se si vuole fare di nuovo la finestra visibile, chiamare il metodo deiconify (o wm_deiconify).

root.deiconify() 

Una volta che si è fatto con la finestra di dialogo, si può distruggere la finestra principale insieme a tutti gli altri widget Tkinter con il metodo destroy:

root.destroy() 
+0

L'uso della finestra principale ha funzionato. Grazie! –

+0

Quindi su StackOverflow ci sono soluzioni che usano .destroy(), tkinter.Toplevel (self) .destroy(), quit(), tkinter.Toplevel (self) .quit(), withdraw(), iconify() tra cui scegliere. Bello. Tranne che non uno solo funziona ... Ho fatto "top_lev = tkinter.Toplevel (etichetta); label.master.destroy(); label.destroy(); top_lev.destroy(); root = tkinter.Tk(); root.withdraw(); root.destroy() "che funziona come un fascino (un po 'di sarcasmo coinvolto). –

+0

@deusexmachina: funzionano tutti se li usi in modo propizio, ma hanno tutti scopi diversi. Sebbene '.quit()' e '.destroy()' siano effettivamente identici. –

10

Non ho testato poiché non ho alcun ambiente Python/TKinter, ma prova questo.

In puro Tk c'è un metodo chiamato "wm" per gestire le finestre. Lì puoi fare qualcosa come "wm withdraw .mywindow" dove ".mywindow" è un toplevel.

In TkInter si dovrebbe essere in grado di fare qualcosa di simile a:

root = Tkinter.Tk() 
root.withdraw() # won't need this 

Se si vuole rendere la finestra visibile ancora una volta, chiamare il metodo deiconify (o wm_deiconify).

root.deiconify() 
+0

come si riattiva la finestra? – IcyFlame

+1

@IcyFlame: si esegue 'root.deiconify()' per riavere la finestra. –

+0

grazie signore, avevo già fatto questa domanda e ho ricevuto una risposta: http://stackoverflow.com/questions/15967690/showing-a-window-that-was-hidden-using-root-with-in- tkinter – IcyFlame

4

su OSX, iconify sembra funzionare meglio:

root = Tkinter.Tk() 
root.iconify() 
0

Se non si desidera lì per un essere "flash", come viene creata la finestra, utilizzare questa leggera variazione:

import Tkinter as tk 
root = tk.Tk() 
root.overrideredirect(1) 
root.withdraw()