Приложение Python Tkinter не закрывается должным образом - PullRequest
3 голосов
/ 06 мая 2011
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 правильно не завершается, когда я нажимаю кнопку «Выйти»?

Ответы [ 2 ]

4 голосов
/ 06 мая 2011

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

3 голосов
/ 06 мая 2011

Причина, по которой это не работает, заключается в том, что вы используете неправильный способ завершить программу в quit_pressed. То, что вы делаете сейчас, это убивает фрейм себя, а не корневой фрейм. Фрейм 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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...