破壊の仕組みがわかりません...
Tk.Toplevel のサブクラスであるクラス SubWindow があります。このサブウィンドウに内部ウィジェットがある場合
self.label = Tk.Label(master=self, text='これはサブ ウィンドウです: %s!!!!'%self)
サブウィンドウを破棄しても、死ぬことはなく、生きているままです(サブウィンドウの配列を見ればわかります)
サブウィンドウを破棄する唯一の方法は、
del self.label
destroy メソッドで。
import Tkinter as Tk
import weakref
root = Tk.Tk()
subwindows = []
def subwindow():
subwindows.append(weakref.ref(SubWindow(root)))
def list_subwindows():
print 'Subwindows: ',
for subwindow in subwindows:
sw = subwindow()
if sw:
print sw,
print ''
class SubWindow(Tk.Toplevel):
def __init__(self, window):
Tk.Toplevel.__init__(self, master = window)
self.label = Tk.Label(master=self, text='This is Sub Window: %s!!!!'%self)
self.label.pack()
# self.bind('<Destroy>', self._destroy)
def _destroy(self, event):
try:
del self.label
except:
pass
bStartWindow = Tk.Button(master=root, text='Start Sub Window',
command=subwindow)
bStartWindow.pack()
bListSubwindows = Tk.Button(master=root, text='List Active subwindows',
command = list_subwindows)
bListSubwindows.pack()
root.mainloop()
内部ウィジェットがある場合、サブウィンドウが破棄されないのはなぜですか?