Какие события могут быть связаны с Tkinter Frame? - PullRequest
1 голос
/ 29 июля 2009

Я делаю небольшое приложение с Tkinter. Я хотел бы очистить несколько вещей в функции, вызываемой, когда мое окно закрыто. Я пытаюсь связать событие закрытия моего окна с этой функцией. Я не знаю, возможно ли это и какова соответствующая последовательность.

Документация Python гласит: See the bind man page and page 201 of John Ousterhout’s book for details.

К сожалению, у меня нет этих ресурсов в моих руках. Кто-нибудь знает список событий, которые могут быть связаны?

Альтернативным решением будет очистить все в __del__ моего класса Frame. По неизвестной причине кажется, что это никогда не называется. Кто-нибудь знает, в чем может быть причина? Некоторые круговые зависимости?

Как только я добавляю элемент управления (раскомментируйте в приведенном ниже коде), __del__ больше не вызывается. Любое решение для этой проблемы?

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()

Ответы [ 2 ]

3 голосов
/ 29 июля 2009

Более или менее определенным ресурсом для событий является справочная страница bind для Tk . Я не совсем понимаю, что вы хотите сделать, но привязка к "<Destroy>" - это, вероятно, событие, которое вы ищете. Делает ли это то, что вам действительно нужно, я не знаю.

 ...
 self.bind("<Destroy>", self.callback)
 ...
 def callback(self, event):
     print("callback called")
3 голосов
/ 29 июля 2009

Я считаю, это - страница справочника bind, которую вы, возможно, искали; Я считаю, что событие, которое вы пытаетесь связать, - Destroy. На __del__ нельзя полагаться (слишком сложно понять, когда циклический цикл ссылки, например, родитель для дочернего виджета и обратно, остановит его запуск!), Использование привязки событий определенно предпочтительнее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...