Какие события могут быть связаны с Tkinter Frame?
-
05-07-2019 - |
Вопрос
Я делаю небольшое приложение с Tkinter. Я хотел бы очистить несколько вещей в функции, вызываемой, когда мое окно закрыто. Я пытаюсь связать событие закрытия моего окна с этой функцией. Я не знаю, возможно ли это и какова соответствующая последовательность.
Документация Python гласит: See the bind man page and page 201 of John Ousterhout’s book for details
.
К сожалению, у меня нет этих ресурсов в моих руках. Кто-нибудь знает список событий, которые могут быть связаны?
Альтернативное решение - очистить все в __del__
моего класса Frame. По неизвестной причине кажется, что это никогда не называется. Кто-нибудь знает, в чем может быть причина? Некоторые круговые зависимости? Р>
Как только я добавляю элемент управления (раскомментируйте в приведенном ниже коде), <=> больше не вызывается. Любое решение для этой проблемы?
from tkinter import *
class MyDialog(Frame):
def __init__(self):
print("hello")
self.root = Tk()
self.root.title("Test")
Frame.__init__(self, self.root)
self.list = Listbox(self, selectmode=BROWSE)
self.list.pack(fill=BOTH, expand=1)
self.pack(fill=BOTH, expand=1)
def __del__(self):
print("bye-bye")
dialog = MyDialog()
dialog.root.mainloop()
Решение
Я считаю, что это является справочной страницей, которую вы можете иметь искал; Я считаю, что событие, которое вы пытаетесь связать, - это Destroy
. На __del__
нельзя полагаться (слишком сложно понять, когда циклический цикл ссылки, например, родительский элемент для дочернего виджета и обратно, остановит его запуск!), использование привязки событий определенно предпочтительнее.
Другие советы
Более или менее определенным ресурсом для событий является страница руководства по привязке для Tk . Я не совсем понимаю, что вы хотите сделать, но привязка к "<Destroy>"
- это, вероятно, событие, которое вы ищете. Делает ли это то, что вам действительно нужно, я не знаю. Р>
...
self.bind("<Destroy>", self.callback)
...
def callback(self, event):
print("callback called")