How would I make destroy() method in tkinter work with my code?
Asked Answered
S

2

8
from tkinter import *

class GameBoard(Frame):
  def __init__(self):
    Frame.__init__(self)
    self.master.title("test")
    self.grid()
    #button frame
    self.__buttonPane = Frame(self)
    self.__buttonPane.grid()
    #buttons
    self.__buttonA1 = Button(self.__buttonPane,text = "A1",command = self._close)
    self.__buttonA1.grid()

  def _close(self):
    GameBoard().destroy()


def main():
  GameBoard().mainloop()

main()

How would I make my function for close to work?

Sheol answered 30/11, 2012 at 18:0 Comment(0)
H
11
GameBoard()

creates a new instance of GameBoard. Therefore:

GameBoard().destroy()

creates a new instance and calls destroy() on it which has no effect on the existing instance.

You want access the current instance in your _close() method which is done through self:

def _close(self):
    self.destroy()

However, this only destroys the frame (and its child windows, like the button), not the top level window (master).

To completely close the UI, you could call self.master.destroy() or simply self.quit():

def _close(self):
    self.quit()
Hahnemann answered 30/11, 2012 at 18:58 Comment(0)
O
5

self.master.destroy() will close both the parent and child process (see I.E. for example). self.destroy will close the child process. I know this is an old post, but I figured this information might still be applicable to someone.

I.E.

def _close(self):
    self.master.destroy()
Olympias answered 23/6, 2017 at 19:6 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.