I am trying to write a class that could allow users to setup a event list, each event will point to a specific function. User could use a selector to run a function by its marco. Below code could work, but i think it's not good. Is there any better way to do it?
class EventDispatcher(object):
def __init__(self):
self.running = False
self.selector = None
self.key = []
self.handler = []
self.thread_monitor = None
def AddEvent(self, key, *args, **kwargs):
self.key.append(key)
self.handler.append(*args, **kwargs)
def DispatchSingleEvent(self):
while(self.running):
if self.selector != None:
self.handler[self.key.index(self.selector)]()
self.selector = None
def ClearAllEvent(self):
self.key.clear()
self.handler.clear()
def IsMacroRunning(self):
return self.running
def Execute(self, event):
self.selector = event
def StartMarco(self):
self.running = True
self.thread_monitor = threading.Thread(target = self.DispatchSingleEvent)
self.thread_monitor.start()
def StopMacro(self):
self.running = False