Una possibilità, come spiegato in un'altra risposta, è quello di utilizzare pack_forget
o grid_forget
. Un'altra opzione è utilizzare lift
e lower
. Questo cambia l'ordine di sovrapposizione dei widget. L'effetto netto è che puoi nascondere i widget dietro i widget di pari livello (o i discendenti dei fratelli). Quando vuoi che siano visibili tu, lift
, e quando vuoi che siano invisibili, le tue lower
.
Il vantaggio (o lo svantaggio ...) è che occupano ancora spazio nel loro master. Se "dimentichi" un widget, gli altri widget potrebbero modificarne la dimensione o l'orientamento, ma se li alzi o li abbassi non lo faranno.
Ecco un semplice esempio:
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()
fonte
2011-05-08 15:15:35
Qual è la domanda, non dovrebbe essere il comportamento appropriato? – pyfunc
@pyfunc La domanda è nell'argomento (indipendentemente dal fatto che sia bello essere lì ma non nel corpo del messaggio). – Shule