1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| try:
import Tkinter as Tk
except:
import tkinter as Tk
def Trace_Maker(widget, master=None, *kwargs):
def delete_events(self):
for event in self.registered_func:
try:
self.after_cancel(event)
except:
pass
def w_destroy(self):
self.delete_events()
for c in self.children.values():
c.destroy()
self.tk.call('destroy', self._w)
if self._name in self.master.children:
del self.master.children[self._name]
self.Misc.destroy(self)
def r_destroy(self):
self.delete_events()
for c in self.children.values():
c.destroy()
self.tk.call('destroy', self._w)
self.Misc.destroy(self)
def register(self, time, func):
self.registered_func.append(self.after(time, func))
try:
if widget._w == '.':
destroy = r_destroy
except:
destroy = w_destroy
cls = type(widget)
cls = cls('Trace_%s' % widget.__name__, (widget,),
{'delete_events': delete_events, 'registered_func': [],
'register': register, 'destroy': destroy, 'Misc': Tk.Misc})
return cls(master, *kwargs)
def disp(x):
print(x)
def go():
R = Trace_Maker(Tk.Tk, None)
#R = Tk.Tk()
R.register(1000, lambda: disp(1))
R.register(3000, lambda: disp(3))
R.register(5000, lambda: disp(5))
E = Trace_Maker(Tk.Entry, R, {'bg': 'red'})
E.register(4000, lambda: disp(4))
E.pack()
R.mainloop()
RR = Tk.Tk()
RR.mainloop()
if __name__ == '__main__':
go() |
Partager