在Python Tkinter中删除标签?

问题描述:

我试图隐藏在这个函数中的一切:在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有没有什么办法让widget不可见?](http://*.com/questions/3819354)(特别是[Bryan的回答](http:// * .com/a/5928294)) – FabienAndre

+0

@FabienAndre我想删除小部件。 –

是的,有一些方法。我看到你正在使用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,这可以解释grid_forget没有做任何事情。 – FabienAndre

+0

@FabienAndre其实网格只是在最后被调用。 –