#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.