Какой метод я могу переопределить для задачи очистки, когда окно Tkinter.Tk в Python? - PullRequest
1 голос
/ 02 июня 2010
class MainGUI(Tkinter.Tk):
    # some overrides

# MAIN 

gui = MainGUI(None)
gui.mainloop()

Но мне нужно сделать некоторую очистку, когда окно закрыто пользователем. Какой метод в Tkinter.Tk можно переопределить?

Ответы [ 2 ]

5 голосов
/ 09 февраля 2011

Если вы хотите, чтобы действие происходило при уничтожении определенного виджета, вы можете переопределить метод destroy (). Смотрите следующий пример:

class MyButton(Tkinter.Button):
    def destroy(self):
        print "Yo!"
        Tkinter.Button.destroy(self)

root = Tkinter.Tk()

f = Tkinter.Frame(root)
b1 = MyButton(f, text="Do nothing")
b1.pack()
f.pack()

b2 = Tkinter.Button(root, text="f.destroy", command=f.destroy)          
b2.pack()

root.mainloop()

Когда кнопка «b2» нажата, рамка «f» уничтожается, с дочерними «b1» и «Yo!» печатается.

5 голосов
/ 02 июня 2010

Вы можете установить привязку, которая срабатывает при разрушении окна. Либо привяжите к <Destroy>, либо добавьте обработчик протокола для WM_DELETE_WINDOW.

Например:

def callback():
    # your cleanup code here

...
root.protocol("WM_DELETE_WINDOW", callback)
...