def add_spinner(func):
def inner(self,*args,**kwargs):
root = self.get_root_window()
spinner = Spinner()
root.add_widget(spinner)
trigger = Clock.schedule_once(partial(func,self,*args,**kwargs))
trigger()
return inner
@add_spinner
def slow_function(dt):
#do some very intensive computations here
def func(dt):
print 'start'
sleep(10)
print 'finnish'
Clock.schedule_once(func)
from threading import Thread
class Dispatcher(Thread):
def __init__(self,func,on_terminate,*args,**kwargs):
super(Dispatcher,self).__init__()
self.func = func
self.args = args
self.kwargs = kwargs
self.on_terminate = on_terminate
self.start()
def run(self):
self.func(*self.args,**self.kwargs)
if self.on_terminate:
self.on_terminate()
def add_spinner(func):
def inner(*args,**kwargs):
root = args[0].get_root_window()
spinner = Spinner()
root.add_widget(spinner)
on_terminate = lambda: root.remove_widget(spinner)
Dispatcher(func,on_terminate,*args,**kwargs)
return inner
class MyWidget(SomeWidget):
@add_spinner
def slow_function(self):