Приложение Python Tkinter не завершается должным образом

#python #tkinter

#python #tkinter

Вопрос:

 from TKinter import *

class Ui(Frame):
  def __init__(self)
    Frame.__init__(self, None)

    self.grid()
    bquit=Button(self, text="Quit", command=self.quit_pressed)
    bquit.grid(row=0, column=0)

  def quit_pressed(self):
    self.destroy()

app=Ui()
app.mainloop()
  

Почему эта программа Tkinter не завершается должным образом, когда я нажимаю кнопку «Выйти»?

Ответ №1:

С помощью self.destroy() вы просто уничтожаете фрейм, а не контейнер верхнего уровня, вам нужно выполнить self.master.destroy() для его корректного завершения

Ответ №2:

Причина, по которой это не работает, заключается в том, что вы используете неправильный способ завершения программы в quit_pressed. То, что вы делаете прямо сейчас, уничтожает фрейм self, а не корневой фрейм. Фрейм self — это новый фрейм, который вы привязали к корневому фрейму, поэтому, когда вы уничтожаете фрейм self, вы не уничтожаете корневой фрейм. Это может показаться запутанным из-за моего стиля набора текста, поэтому позвольте мне привести пример.

В настоящее время у вас есть

 def quit_pressed(self):
    self.destroy() #This destroys the current self frame, not the root frame which is a different frame entirely
  

Вы можете исправить это, изменив функцию на эту,

 def quit_pressed(self):
    quit() #This will kill the application itself, not the self frame.