2013-06-19 5 views
5

Я пытаюсь скрыть все, что в этой функции:Удаление метки в 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 

Так что я могу показать вещи в этих функциях:

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") 

Затем наоборот, когда кнопка Отмена ударен (очистка вещи в addToIt и addInput). Есть ли способ сделать это?

+0

Вы хотите удалить виджеты или удалить значения в полях? – FabienAndre

+2

Вам может быть интересна эта другая тема: [В Tkinter есть ли способ сделать виджет невидимым?] (Http://stackoverflow.com/questions/3819354) (особенно [ответ Брайана] (http: // stackoverflow .com/a/5928294)) – FabienAndre

+0

@FabienAndre Я хочу удалить виджеты. –

ответ

6

Да, есть способ. Я вижу, вы используете grid. Таким образом, чтобы скрыть объект, используйте Object.grid_forget(). На всякий случай, если вы используете pack, вы можете скрыть объект на Object.pack_forget(). То же самое работает с place.

У меня есть идея, которая может пригодиться. Я рекомендую вам, чтобы все объекты, которые вы хотите скрыть одновременно в одном Frame, так что вы будете просто использовать Frame.grid_forget() вместо

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

Помните, что с помощью этого будет только сделать любой объект невидимым, но он по-прежнему существует «внутри» память со всеми ее свойствами.

+0

Я попытался поставить self.txtHome.grid_forget(), но это не сработало. Я написал это неправильно? –

+0

В примере, который вы опубликовали, self.txtHome не выкладывается, т. Е. Вы не вызывали на нем сетку, это может объяснить, что grid_forget ничего не делает. – FabienAndre

+0

@FabienAndre На самом деле на нем вызывается сетка, только в конце. –

Смежные вопросы