pythontkinterdestroyquit

python tkinter Toplevel .destroy() vs .quit() not working as intended


I have a class Duplicates that checks for duplicates within 40 words.

I have a class Window that creates and runs the main window where i post the result.

I have a class popWindow that creates a Toplevel window when asking user for what to do with a possible double.

My problem is closing the popWindow once a choice is submited.

the version I have that actualy runs and posts an aswer (the text with marked duplicates) uses quit to terminate the window (meaning the popup is still there in the way) or to simply have multiple popups till you are done.

class Duplicates:

    def markWord(self):
        self.appendMarkedWord(self.word)
        self.checked.append(self.word)
        self.pop.topLevel_exit()
        return ""

class popUpWindow:

    temp = Button( self, font    = 8,
                         text    = "Allowed this run only",
                         command = app.newFile.markWord
                         )
    temp.place( x = 178,
                y = 55
                )

if I instead use .destroy() the window shuts but the program stops running and that is worse.

How do i work around this so it shuts the window but still continues to run the program?

Ok, after many many hours it seemed the real problem was destroy() was not stopping my popUpWindow.mainloop() so I now have altered my exit code to first do quit() and then do destroy(). This is not what i have seen as examples at all and it seems to me that destroy() on toplevel mainloop is not terminating it (destroy() works fine on my root.mainloop).

def topLevel_exit(self):
    self.pop.quit()
    self.pop.destroy()

Solution

  • If you call destroy() on a toplevel window, it will not stop the application from running. If your application stops, there must be more to your code that what you're telling us. Without question, the right way to get rid of the popup is to call destroy on the instance of the Toplevel.