Revisão | a28bbbf2f1078dede92d80855281a1a57efdf61b (tree) |
---|---|
Hora | 2010-05-10 18:30:58 |
Autor | Hidehisa SHIOMI <pylaf@user...> |
Commiter | Hidehisa SHIOMI |
メモリリークを塞いだ
* EasyComponent._menuのpartial(self.popup,master=master,comp=self.fga)にてself.fgaを参照していたので、EasyComponent.destroy()でself._menu = Noneで解放した
* PortListboxにおいてappvar.trace('w',self.set)をデストラクタで解放するようにした
* LinkerにおいてPortListboxをデストラクタで解放するようにした
@@ -14,9 +14,9 @@ | ||
14 | 14 | Component.__init__(self,master) |
15 | 15 | self.colcount = 0 |
16 | 16 | self._menu = None |
17 | - self.sig_out = Port(array([])) | |
18 | - self.plotter = Component(self) | |
19 | 17 | if not self.PLOTTER == None: |
18 | + self.sig_out = Port(array([])) | |
19 | + self.plotter = Component(self) | |
20 | 20 | dummy = self.PLOTTER() |
21 | 21 | for key,info in getmembers(dummy,lambda x:iscontain(x,Port)): |
22 | 22 | setattr(self.plotter,key,Port(info.get())) |
@@ -42,6 +42,9 @@ | ||
42 | 42 | Linker(self) |
43 | 43 | def launch(self): |
44 | 44 | ClassListbox(Tkinter.Toplevel(findtoplevel(self))).pack() |
45 | + def destroy(self): | |
46 | + self._menu = None | |
47 | + Component.destroy(self) | |
45 | 48 | |
46 | 49 | class EasyPort(Port): |
47 | 50 | def _inckey(self,caller,key=None): |
@@ -243,8 +243,6 @@ | ||
243 | 243 | return frm |
244 | 244 | def menu(self,master,cnf={},**kw): |
245 | 245 | return None |
246 | - def __del__(self): | |
247 | - print '%s is romoved' % self.__class__.__name__ | |
248 | 246 | |
249 | 247 | class Frame(Tkinter.Frame,PortHolder,ComponentHolder): |
250 | 248 | def destroy(self): |
@@ -57,7 +57,9 @@ | ||
57 | 57 | def __init__(self,master,**key): |
58 | 58 | frame = Tkinter.Frame(master) |
59 | 59 | self.apps = apps = popcnf('apps',key) |
60 | - self.appvar = appvar = Tkinter.StringVar(); appvar.set(apps.keys()[0]); appvar.trace('w',self.set) | |
60 | + self.appvar = appvar = Tkinter.StringVar() | |
61 | + appvar.set(apps.keys()[0]) | |
62 | + self.appvar_trace = appvar.trace('w',self.set) | |
61 | 63 | self.portvar = Tkinter.StringVar() |
62 | 64 | Tkinter.OptionMenu(frame,appvar,*apps.keys()).pack() |
63 | 65 | self.makeScrolledListbox(Tkinter.Frame(frame),**key); self.master.pack() |
@@ -81,6 +83,9 @@ | ||
81 | 83 | self.insert(Tkinter.END,*[key for key in pdic]) |
82 | 84 | def get(self): return self.pdic[self.portvar.get()] |
83 | 85 | def clear(self): self.portvar.set('') |
86 | + def destroy(self): | |
87 | + self.appvar.trace_vdelete('w',self.appvar_trace) | |
88 | + Tkinter.Listbox.destroy(self) | |
84 | 89 | |
85 | 90 | class PortCollector(dict): |
86 | 91 | def __init__(self,component): |
@@ -148,4 +153,7 @@ | ||
148 | 153 | except KeyError: pass |
149 | 154 | self.src.clear() |
150 | 155 | self.tgt.clear() |
156 | + def destroy(self): | |
157 | + self.src, self.tgt = None, None | |
158 | + Tkinter.Toplevel.destroy(self) | |
151 | 159 | |
\ No newline at end of file |
@@ -52,10 +52,10 @@ | ||
52 | 52 | def popup(self,master,comp): |
53 | 53 | App(Tkinter.Toplevel(master),comp).pack() |
54 | 54 | comp.trigger() |
55 | - | |
55 | + | |
56 | 56 | def test(master=None): |
57 | 57 | o = App(master,MODAM); o.pack() |
58 | - | |
58 | + | |
59 | 59 | if __name__ == '__main__': |
60 | 60 | test(Tkinter.Tk()) |
61 | 61 | Tkinter.mainloop() |