Commit MetaInfo

Revisãoa28bbbf2f1078dede92d80855281a1a57efdf61b (tree)
Hora2010-05-10 18:30:58
AutorHidehisa SHIOMI <pylaf@user...>
CommiterHidehisa SHIOMI

Mensagem de Log

メモリリークを塞いだ
* 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をデストラクタで解放するようにした

Mudança Sumário

Diff

diff -r 916abddd8ff0 -r a28bbbf2f107 src/PyLAF/easy.py
--- a/src/PyLAF/easy.py Mon May 10 16:55:56 2010 +0900
+++ b/src/PyLAF/easy.py Mon May 10 18:30:58 2010 +0900
@@ -14,9 +14,9 @@
1414 Component.__init__(self,master)
1515 self.colcount = 0
1616 self._menu = None
17- self.sig_out = Port(array([]))
18- self.plotter = Component(self)
1917 if not self.PLOTTER == None:
18+ self.sig_out = Port(array([]))
19+ self.plotter = Component(self)
2020 dummy = self.PLOTTER()
2121 for key,info in getmembers(dummy,lambda x:iscontain(x,Port)):
2222 setattr(self.plotter,key,Port(info.get()))
@@ -42,6 +42,9 @@
4242 Linker(self)
4343 def launch(self):
4444 ClassListbox(Tkinter.Toplevel(findtoplevel(self))).pack()
45+ def destroy(self):
46+ self._menu = None
47+ Component.destroy(self)
4548
4649 class EasyPort(Port):
4750 def _inckey(self,caller,key=None):
diff -r 916abddd8ff0 -r a28bbbf2f107 src/PyLAF/framework.py
--- a/src/PyLAF/framework.py Mon May 10 16:55:56 2010 +0900
+++ b/src/PyLAF/framework.py Mon May 10 18:30:58 2010 +0900
@@ -243,8 +243,6 @@
243243 return frm
244244 def menu(self,master,cnf={},**kw):
245245 return None
246- def __del__(self):
247- print '%s is romoved' % self.__class__.__name__
248246
249247 class Frame(Tkinter.Frame,PortHolder,ComponentHolder):
250248 def destroy(self):
diff -r 916abddd8ff0 -r a28bbbf2f107 src/PyLAF/instant.py
--- a/src/PyLAF/instant.py Mon May 10 16:55:56 2010 +0900
+++ b/src/PyLAF/instant.py Mon May 10 18:30:58 2010 +0900
@@ -57,7 +57,9 @@
5757 def __init__(self,master,**key):
5858 frame = Tkinter.Frame(master)
5959 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)
6163 self.portvar = Tkinter.StringVar()
6264 Tkinter.OptionMenu(frame,appvar,*apps.keys()).pack()
6365 self.makeScrolledListbox(Tkinter.Frame(frame),**key); self.master.pack()
@@ -81,6 +83,9 @@
8183 self.insert(Tkinter.END,*[key for key in pdic])
8284 def get(self): return self.pdic[self.portvar.get()]
8385 def clear(self): self.portvar.set('')
86+ def destroy(self):
87+ self.appvar.trace_vdelete('w',self.appvar_trace)
88+ Tkinter.Listbox.destroy(self)
8489
8590 class PortCollector(dict):
8691 def __init__(self,component):
@@ -148,4 +153,7 @@
148153 except KeyError: pass
149154 self.src.clear()
150155 self.tgt.clear()
156+ def destroy(self):
157+ self.src, self.tgt = None, None
158+ Tkinter.Toplevel.destroy(self)
151159
\ No newline at end of file
diff -r 916abddd8ff0 -r a28bbbf2f107 src/tutorial-basic/MODAM5.py
--- a/src/tutorial-basic/MODAM5.py Mon May 10 16:55:56 2010 +0900
+++ b/src/tutorial-basic/MODAM5.py Mon May 10 18:30:58 2010 +0900
@@ -52,10 +52,10 @@
5252 def popup(self,master,comp):
5353 App(Tkinter.Toplevel(master),comp).pack()
5454 comp.trigger()
55-
55+
5656 def test(master=None):
5757 o = App(master,MODAM); o.pack()
58-
58+
5959 if __name__ == '__main__':
6060 test(Tkinter.Tk())
6161 Tkinter.mainloop()
Show on old repository browser