zoukankan      html  css  js  c++  java
  • 为python写了一个事件机制 小川 博客园

    为python写了一个事件机制 - 小川 - 博客园

     本人新学PYTHON不久,问了很多人都说PYTHON没有事件机制。。 偶觉得很麻烦,就自己写了一个。

    要广播事件就必须继承 EventDispatcher类, 广播的事件必须是Aevent或者其子类。



    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



    = Obj()

    o.addEventListener(
    'iadd',onIadd)

    o.addI()    
    #output 2

    o.addI()    #output 3

    o.removeEventListener('iadd',onIadd)

    o.addI()    
    #no output

  • 相关阅读:
    hdfs搭建常见问题
    [转]opencv与Labview的结合(Dll调用)
    [转]opencv二值化的cv2.threshold函数
    忙在比赛前
    [转]使用charls抓包微信小程序的解决方案
    [转]Python调用C语言
    [转]基于Python实现matplotlib中动态更新图片(交互式绘图)
    [转]Python十六进制与字符串的转换
    STM32学习日记
    [转]Linux下的softlink和hardlink
  • 原文地址:https://www.cnblogs.com/lexus/p/2496591.html
Copyright © 2011-2022 走看看