Last active
August 29, 2015 14:25
Revisions
-
clayote revised this gist
Jul 21, 2015 . 1 changed file with 23 additions and 23 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,31 +1,31 @@ from kivy.event import EventDispatcher from kivy.clock import Clock from functools import partial class trigger(object): """Make a trigger from a method outside of your class's __init__.""" def __init__(self, func): self.func = func def __get__(self, instance, owner=None): if instance is None: # EventDispatcher iterates over its attributes before it instantiates. # Don't try making any trigger in that case. return if not hasattr(self, '_trig'): self._trig = Clock.create_trigger( partial(self.func, instance), 0 ) return self._trig class Salad(EventDispatcher): def toss(self, *args): pass _trigger_toss = trigger(toss) @trigger def _trigger_serve(self, *args): # for when a method should only be usable via trigger pass -
clayote created this gist
Jul 21, 2015 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,31 @@ from kivy.event import EventDispatcher from kivy.clock import Clock # this works fine class Burger(EventDispatcher): def flip(self, *args): pass @property def _trigger_flip(self): if not hasattr(self, '_real_trigger_flip'): self._real_trigger_flip = Clock.create_trigger(self.flip) return self._real_trigger_flip # this keeps triggering the method on unexpected objects, # including many that shouldn't have the method at all, eg. floats def get_trigger(obj, fun): n = '_real_trigger_' + fun.__name__ if not hasattr(obj, n): setattr(obj, n, Clock.create_trigger(fun)) return getattr(obj, n) trigger = lambda fun: property(fget=lambda self: get_trigger(self, fun)) class Fries(EventDispatcher): def fry(self, *args): pass _trigger_fry = trigger(fry)