为python写了一个事件机制 - 小川 - 博客园
2012-05-11 19:53
197 查看
为python写了一个事件机制 - 小川 - 博客园
为python写了一个事件机制 本人新学PYTHON不久,问了很多人都说PYTHON没有事件机制。。 偶觉得很麻烦,就自己写了一个。
要广播事件就必须继承 EventDispatcher类, 广播的事件必须是Aevent或者其子类。
Code
class EventDispatcher(object):
def __init__(self):
self.events = {}
def addEventListener(self,eventType,listenFunction):
if not self.events.has_key(eventType):
self.events[eventType] = []
eventList = self.events[eventType]
eventList.append(listenFunction)
def removeEventListener(self,eventType,ListenFunction):
if not self.events.has_key(eventType):
return
eventList = self.events[eventType]
eventList.remove(ListenFunction)
def dispatchEvent(self,event):
if not self.events.has_key(event.type):
return
eventList = self.events[event.type]
for fun in eventList:
fun()
def __del__(self):
keys = self.events.keys
for key in keys:
eventList = self.events[key]
for fun in eventList:
del fun
class Aevent(object):
def __init__(self,Type):
self.type = Type
使用示例代码
class Obj(EventDispatcher):
def __init__(self):
self.i = 1
EventDispatcher.__init__(self)
def addI(self):
self.i = 1 + self.i
EventDispatcher.dispatchEvent(self,Aevent('iadd'))
def onIadd():
print o.i
o = Obj()
o.addEventListener('iadd',onIadd)
o.addI() #output 2
o.addI() #output 3
o.removeEventListener('iadd',onIadd)
o.addI() #no output
要广播事件就必须继承 EventDispatcher类, 广播的事件必须是Aevent或者其子类。
Code
class EventDispatcher(object):
def __init__(self):
self.events = {}
def addEventListener(self,eventType,listenFunction):
if not self.events.has_key(eventType):
self.events[eventType] = []
eventList = self.events[eventType]
eventList.append(listenFunction)
def removeEventListener(self,eventType,ListenFunction):
if not self.events.has_key(eventType):
return
eventList = self.events[eventType]
eventList.remove(ListenFunction)
def dispatchEvent(self,event):
if not self.events.has_key(event.type):
return
eventList = self.events[event.type]
for fun in eventList:
fun()
def __del__(self):
keys = self.events.keys
for key in keys:
eventList = self.events[key]
for fun in eventList:
del fun
class Aevent(object):
def __init__(self,Type):
self.type = Type
使用示例代码
class Obj(EventDispatcher):
def __init__(self):
self.i = 1
EventDispatcher.__init__(self)
def addI(self):
self.i = 1 + self.i
EventDispatcher.dispatchEvent(self,Aevent('iadd'))
def onIadd():
print o.i
o = Obj()
o.addEventListener('iadd',onIadd)
o.addI() #output 2
o.addI() #output 3
o.removeEventListener('iadd',onIadd)
o.addI() #no output
相关文章推荐
- 为python写了一个事件机制
- Flex事件处理实现机制的一个试验
- [转摘] 关于C#中委托和事件机制的一个最佳实例
- Android中点击空白区域控件自动隐藏(事件传递机制中的一个小例子)
- 深入理解Python中协程的应用机制: 使用纯Python来实现一个操作系统吧!!
- W3C下的冒泡和捕获机制。到底是冒泡呢。还是捕获呢。一个DOM元素绑定多个事件时如何执行。
- 用OC实现一个类似java的事件监听机制
- 【Unity基于C#事件委托机制,最轻松易懂的版本,一个实例解决你的困惑】
- 反电话推销SEO联合申明[我不是故意想放首页,我只是想借助博客园的力量来关注这样的一个实际的事件]
- 使用事件处理创建一个简单的绘图实例程序 python
- iOS的界面触摸事件处理机制,然后用一个实例来说明下应用场景.
- PHP和Python/Ruby的运行机制有一个本质区别
- 深入理解Python中协程的应用机制: 使用纯Python来实现一个操作系统吧!!
- python模拟事件触发机制详解
- Javascript事件传播(冒泡机制) (摘自 博客园 萍水相逢)
- 自己动手写一个测试Android事件传递机制的demo
- 实现一个简单的事件订阅通知机制(Observer模式实现)
- W3C下的冒泡和捕获机制。到底是冒泡呢。还是捕获呢。一个DOM元素绑定多个事件时如何执行。
- 深入理解Python中协程的应用机制: 使用纯Python来实现一个操作系统吧!!
- 深入理解Python中协程的应用机制: 使用纯Python来实现一个操作系统吧!!