2009-09-10 32 views
34

¿Conoces una manera inteligente de ocultar o de otra forma deshacerse de la ventana raíz que aparece, abierta por Tk()? Me gustaría simplemente usar un diálogo normal.¿Cómo me deshago de la ventana raíz de Python Tkinter?

¿Debo omitir el diálogo y poner todos mis componentes en la ventana raíz? ¿Es posible o deseable? ¿O hay una solución más inteligente?

+4

El enlace de la imagen no es válido. –

Respuesta

47

Probablemente la gran mayoría de las aplicaciones basadas en tk colocan todos los componentes en la ventana raíz predeterminada. Esta es la forma más conveniente de hacerlo ya que ya existe. Elegir ocultar la ventana predeterminada y crear la tuya es algo muy bueno, aunque requiere un poco de trabajo extra.

Para responder a su pregunta específica sobre cómo ocultarlo, utilice el método withdraw de la ventana raíz:

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

Si desea hacer la ventana visible de nuevo, llame al método deiconify (o wm_deiconify).

root.deiconify() 

Una vez que haya terminado con el cuadro de diálogo, puede destruir la ventana raíz, junto con todos los otros widgets Tkinter con el destroy método:

root.destroy() 
+0

Usar la ventana principal hizo el truco. ¡Gracias! –

+0

Entonces en StackOverflow hay soluciones que usan .destroy(), tkinter.Toplevel (self) .destroy(), quit(), tkinter.Toplevel (self) .quit(), withdraw(), iconify() para elegir. Bonito. Excepto que no funciona ninguna ... Hice "top_lev = tkinter.Toplevel (label); label.master.destroy(); label.destroy(); top_lev.destroy(); root = tkinter.Tk(); root.withdraw(); root.destroy() "que funciona como un amuleto (algo de sarcasmo involucrado). –

+0

@deusexmachina: todos funcionan si los usas adecuadamente, pero todos tienen diferentes propósitos. Aunque '.quit()' y '.destroy()' son efectivamente idénticos. –

10

No lo he probado porque no tengo ningún entorno Python/TKinter, pero prueba esto.

En Tk puro hay un método llamado "wm" para administrar las ventanas. Allí puedes hacer algo como "wm withdraw .mywindow", donde ".mywindow" es un toplevel.

En TkInter usted debe ser capaz de hacer algo similar a:

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

Si desea hacer la ventana visible de nuevo, llame al método deiconify (o wm_deiconify).

root.deiconify() 
+0

¿Cómo recuperas la ventana? – IcyFlame

+1

@IcyFlame: haces 'root.deiconify()' para hacer que la ventana vuelva a aparecer. –

+0

gracias señor, ya había hecho esa pregunta y obtuve una respuesta: http://stackoverflow.com/questions/15967690/showing-a-window-hat-was-hidden-using-root-withdraw-in- tkinter – IcyFlame

4

en OSX, iconificar parece funcionar mejor:

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

Si no quiere que haya un ser "flash" que se crea la ventana, utilice esta ligera variación:

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