2013-06-19 83 views
5

Tôi cố gắng để che giấu tất cả mọi thứ trong hàm này:Xóa nhãn bằng 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 

Vì vậy mà tôi có thể hiển thị những điều trong những chức năng:

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

Sau đó, ngược lại khi nút Cancel là hit (thanh toán bù trừ những điều trong addToIt và addInput). Có cách nào tôi có thể làm điều này?

+0

Bạn có muốn xóa tiện ích hoặc xóa giá trị trong trường không? – FabienAndre

+2

Bạn có thể quan tâm đến chủ đề khác này: [Trong Tkinter là có cách nào để làm cho một widget không hiển thị?] (Http://stackoverflow.com/questions/3819354) (đặc biệt là [câu trả lời của Bryan] (http: // stackoverflow .com/a/5928294)) – FabienAndre

+0

@FabienAndre Tôi muốn xóa các tiện ích con. –

Trả lời

6

Có, có một số cách. Tôi thấy bạn đang sử dụng grid. Vì vậy, để ẩn một đối tượng sử dụng Object.grid_forget(). Chỉ trong trường hợp, nếu bạn sử dụng pack, bạn có thể ẩn một đối tượng theo Object.pack_forget(). Điều tương tự cũng hoạt động với place.

Tôi có một số ý tưởng, có thể hữu ích. Tôi khuyên bạn nên bạn phải có tất cả các đối tượng mà bạn muốn ẩn đồng thời trong một đơn Frame, vì vậy bạn sẽ chỉ cần sử dụng Frame.grid_forget() thay vì

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

Hãy nhớ rằng sử dụng này sẽ chỉ làm cho bất kỳ đối tượng vô hình, nhưng nó vẫn tồn tại "trong" bộ nhớ với tất cả các thuộc tính của nó.

+0

Tôi đã thử đặt self.txtHome.grid_forget() và nó không hoạt động. Tôi đã viết sai? –

+0

Trong ví dụ bạn đã đăng, self.txtHome không được bố trí, nghĩa là bạn không gọi điện lưới trên đó, điều này có thể giải thích rằng grid_forget không làm gì cả. – FabienAndre

+0

@FabienAndre Trên thực tế, lưới điện được gọi trên đó, chỉ ở cuối. –