2013-06-19 36 views
5

Sto cercando di nascondere tutto in questa funzione:Cancellare un'etichetta in Python Tkinter?

def addHome(self): 
    Label(self, text = "Would you like to add to your to-do list, or generate a random item?", bg="#efefef").grid(row = 3, columnspan = 2, sticky="W") 
    self.txtHome = Entry(self) 

    self.btnAddToIt = Button(self, text = "Add To It!", bg="#efefef") 
    self.btnAddToIt.grid(row = 4, columnspan = 2) 
    self.btnAddToIt["command"] = self.addToIt 

    self.btnRandom = Button(self, text = "Random!", bg="#efefef") 
    self.btnRandom.grid(row = 5, columnspan = 2) 
    self.btnRandom["command"] = self.addRandom 

In modo che posso mostrare le cose in queste funzioni:

def addToIt(self): 
    #self.clearMiddle() 
    Label(self, text = "Add To List").grid(row = 3, columnspan = 2) 
    self.addInput() 

    self.btnProcessAdd = Button(self, text = "Add To It!", bg="#efefef") 
    self.btnProcessAdd.grid(row = 7, column = 0) 
    self.btnProcessAdd["command"] = self.processAdd 

    self.btnCancel = Button(self, text = "Cancel", bg="#efefef") 
    self.btnCancel.grid(row = 7, column = 1) 
    self.btnCancel["command"] = self.addHome 

def addInput(self): 
    #adds input for add to item page 
    Label(self, text = "Name of Item:", bg="#efefef", width=50).grid(row=3, column=0) 
    self.nameOfItem = Entry(self) 
    self.nameOfItem.grid(row = 3, column = 1) 
    self.nameOfItem.insert(0, "Be Awesome") 

    Label(self, text = "Item Category:", bg="#efefef", width=50).grid(row = 4, column = 0, sticky="E") 
    self.itemCategory = Listbox(self, height = 5) 
    self.itemCategory.grid(row = 4, column = 1) 
    self.itemCategory.insert(END, "Fun", "School", "Work", "Exercise", "Other") 

    Label(self, text = "Other Item Details:", bg="#efefef", width=50).grid(row = 5, column = 0, sticky="E") 
    self.otherItemDetails = Text(self, width=22, height=3) 
    self.otherItemDetails.grid(row = 5, column = 1) 

    Label(self, text = "Due Date (mm/dd/yy):", bg="#efefef", width=50).grid(row = 6, column = 0, sticky="E") 
    self.dueDate = Entry(self) 
    self.dueDate.grid(row = 6, column = 1) 
    self.dueDate.insert(0, "06/19/2013") 

Poi viceversa quando il pulsante Annulla è colpito (compensazione delle cose in addToIt e addInput). C'è un modo per farlo?

+0

Vuoi rimuovere i widget o cancellare i valori nei campi? – FabienAndre

+2

Ti potrebbe interessare questo altro thread: [In Tkinter esiste un modo per rendere un widget non visibile?] (Http://stackoverflow.com/questions/3819354) (in particolare [risposta di Bryan] (http: // stackoverflow .com/a/5928294)) – FabienAndre

+0

@FabienAndre Voglio rimuovere i widget. –

risposta

6

Sì, c'è un modo. Vedo che stai utilizzando grid. Quindi, per nascondere un oggetto usa Object.grid_forget(). Nel caso in cui, se si utilizza pack, è possibile nascondere un oggetto per Object.pack_forget(). La stessa cosa funziona con place.

Ho qualche idea, che potrebbe tornare utile. Vi consiglio di avere tutti gli oggetti che si desidera nascondere simultaneamente in un unico Frame, quindi dovrete semplicemente usare Frame.grid_forget() invece di

Obj1.grid_forget() 
Obj2.grid_forget() 
Obj3.grid_forget() 
. 
. 
. 

Ricorda che utilizza questo servirà solo a rendere un oggetto invisibile, ma esiste ancora "dentro" memoria con tutte le sue proprietà.

+0

Ho provato a mettere self.txtHome.grid_forget() e non ha funzionato però. Ho sbagliato a scrivere? –

+0

Nell'esempio che hai postato, self.txtHome non è disposto, cioè non hai chiamato la griglia su di esso, questo può spiegare che grid_forget non fa nulla. – FabienAndre

+0

@FabienAndre In realtà la griglia viene chiamata su di essa, proprio alla fine. –