Una opción, tal como se explica en otra respuesta, es utilizar pack_forget
o grid_forget
. Otra opción es usar lift
y lower
. Esto cambia el orden de apilamiento de los widgets. El efecto neto es que puede ocultar widgets detrás de widgets hermanos (o descendientes de hermanos). Cuando desee que sean visibles, lift
, y cuando desee que sean invisibles, lower
.
La ventaja (o desventaja ...) es que todavía ocupan espacio en su maestro. Si "olvida" un widget, los otros widgets pueden reajustar su tamaño u orientación, pero si los sube o los baja no lo harán.
Aquí está un ejemplo sencillo:
import Tkinter as tk
class SampleApp(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
self.frame = tk.Frame(self)
self.frame.pack(side="top", fill="both", expand=True)
self.label = tk.Label(self, text="Hello, world")
button1 = tk.Button(self, text="Click to hide label",
command=self.hide_label)
button2 = tk.Button(self, text="Click to show label",
command=self.show_label)
self.label.pack(in_=self.frame)
button1.pack(in_=self.frame)
button2.pack(in_=self.frame)
def show_label(self, event=None):
self.label.lift(self.frame)
def hide_label(self, event=None):
self.label.lower(self.frame)
if __name__ == "__main__":
app = SampleApp()
app.mainloop()
¿Cuál es la pregunta, ¿no debería ser ese el comportamiento apropiado? – pyfunc
@pyfunc La pregunta está en el tema (si es bueno o no estar allí, pero no en el cuerpo del mensaje). – Shule