简体   繁体   中英

How do I use destroy within functions and classes - tkinter?

I've seen some usage of self.destroy() within classes but I couldn't get it working with what I wanted it to do.

I have the class resultsPage that shows results obtained on another page. I have made the displayResults(pageNo) function to show these when resultsPage is visible. The problem arises with the back and next buttons which are made to go between pages of results. All widgets are created on top of each other but I want to remove them all then create the new ones. I added self.destroy() to try and fix this but it didn't work.

I'm not sure if it's to do with the placement of where I'm defining my functions but I have had a play around with where they're defined and it hasn't changed the error message.

This is a simplified example of my code:

class resultsPage(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)

    def onShowFrame(self, event):
        def displayResults(pageNo):
            self.destroy()
            #Create widgets related to pageNo
            #Create back and next buttons e.g.
            back = tk.Button(self, text="<=",
                                 command=lambda: displayResults(pageNo - 1))
        displayResults(1)

The error I get is: _tkinter.TclError: bad window path name ".!frame.!previewresultspage"

If it helps, I can post my full code but I thought I'd generalise it so it's more helpful to others.

You are deleting the widget in onShowFrame , and then immediately try to create a new widget with it as the parent. You can't use a deleted widget as the parent of another widget.

As pointed out, using self.destroy() in this case, will not work. To achieve the goal of deleting all widgets on the frame, you can use a loop (credit to @stovfl):

for widget in self.grid_slaves():
    widget.destroy()

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM