2012-04-22 25 views
10

¿Cómo se muestran y se ocultan los widgets en Tkinter? Quiero tener un recuadro de entrada, pero no mostrarlo en todo momento. ¿Puede alguien mostrarme las funciones para mostrar y ocultar widgets de entrada y otros widgets en tkinter? Quiero poder hacer esto sin tener múltiples marcos.Mostrar y ocultar widgets

+3

Creo que está la respuesta a su pregunta: http://stackoverflow.com/questions/3819354/in-tkinter-is-there-any-way-to-make-a-widget-not-visable –

Respuesta

20

This has been answered before on stackoverflow. La respuesta corta es que puede usar grid_remove, que hará que el widget se elimine si se agregó previamente a través de la cuadrícula. grid_remove recuerda dónde estaba el widget, por lo que un simple grid() lo regresará sin tener que volver a especificar todas las opciones.

También puede usar pack_forget (si usa el paquete) y grid_forget (si usa la red). Funcionan de forma similar a grid_remove, excepto que hacen que se olviden todas las configuraciones, lo que significa que debe volver a colocarlas explícitamente en el lugar correcto de la pantalla.

Otra opción es aprovechar el orden de apilamiento de los widgets. Puede usar el método lower para ocultar el widget detrás de su elemento principal y lift para subirlo arriba. Ver this answer para un ejemplo.

0

Probé las sugerencias que otros publicaron y noté que estaba cometiendo un simple error. No puede llamar al .grid() en la misma línea que declara el widget que va a ocultar.

Para aclarar, que previamente tenía esto:

self.helpExpansion = ttk.Label(self.helpMenu, text="Expansion Widget").grid(row=1, column=3, sticky=EW) 
self.helpExpansion.grid_remove() 

Pero tengo el error AttributeError: 'NoneType' object has no attribute 'grid_remove'. Para solucionarlo, he tenido que hacer la llamada a .grid() en una nueva línea, así:

self.helpExpansion = ttk.Label(self.helpMenu, text="Help Expansion") 
self.helpExpansion.grid(row=1, column=3, sticky=EW) 
self.helpExpansion.grid_remove() 

Entonces para alternar entre mostrar y ocultar, simplemente alternado entre llamar self.helpExpansion.grid() (argumentos de la función no es necesario) y self.helpExpansion.grid_remove().

Para mí funcionó con tk.Label o ttk.Label. Estoy usando Python 2.7.13. ¡Espero que ayude!

+0

The Esto se debe a que, en lugar de asignar la referencia de etiqueta a self.helpExpansion, en realidad está asignando el valor de retorno de la llamada a grid(), que devuelve None. Agregar la llamada a grid() en la llamada al constructor de widgets es una forma abreviada conveniente, pero solo si no necesita una referencia posterior a ese widget (como una etiqueta fija, o cuando interactúa con el widget a través de uno de las variables tk especiales o a través de una devolución de llamada). – DrEsperanto

Cuestiones relacionadas