bugfix
This commit is contained in:
parent
2ef8a1e73e
commit
0d77b6a992
62
appPublic/eventproperty.py
Normal file
62
appPublic/eventproperty.py
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
from eventpy.eventdispatcher import EventDispatcher
|
||||||
|
from appPublic.dictObject import DictObject
|
||||||
|
|
||||||
|
def bind(self, eventname, handler):
|
||||||
|
self.appendListener(eventname, handler)
|
||||||
|
|
||||||
|
def unbind(self, eventname, handler):
|
||||||
|
self.removeListener(eventname, handler);
|
||||||
|
|
||||||
|
EventDispatcher.bind = bind
|
||||||
|
EventDispatcher.unbind = unbind
|
||||||
|
|
||||||
|
class EventProperty:
|
||||||
|
def __init__(self, event_name, initial_value=None):
|
||||||
|
self._value = initial_value
|
||||||
|
self.event_name = event_name
|
||||||
|
|
||||||
|
def __get__(self, instance, owner):
|
||||||
|
return self._value
|
||||||
|
|
||||||
|
def __set__(self, instance, value):
|
||||||
|
if self._value != value:
|
||||||
|
self._value = value
|
||||||
|
d = DictObject()
|
||||||
|
d.target = instance
|
||||||
|
d.data = value
|
||||||
|
d.event = self.event_name
|
||||||
|
instance.dispatch(self.event_name, d)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
class SomeClass(EventDispatcher):
|
||||||
|
state = EventProperty('onstate', 0)
|
||||||
|
age = EventProperty('onage', 20)
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
super().__init__()
|
||||||
|
|
||||||
|
def observer1(data):
|
||||||
|
print(f"Observer 1 received: {data}")
|
||||||
|
|
||||||
|
def observer2(data):
|
||||||
|
print(f"Observer 2 received: {data}")
|
||||||
|
|
||||||
|
def observer3(data):
|
||||||
|
print(f"Observer 3 received: {data}")
|
||||||
|
|
||||||
|
# 创建实例
|
||||||
|
si = SomeClass()
|
||||||
|
# 添加监听
|
||||||
|
si.bind('onstate', observer1)
|
||||||
|
si.bind('onstate', observer2)
|
||||||
|
si.bind('onage', observer3)
|
||||||
|
|
||||||
|
# 改变状态
|
||||||
|
si.state = 10 # 输出: Observer 1 received: 10, Observer 2 received: 10
|
||||||
|
# 再次改变状态
|
||||||
|
# si.unbind('onstate', observer1) unbind has error
|
||||||
|
si.state = 20 # 输出: Observer 2 received: 20
|
||||||
|
# change age's value
|
||||||
|
si.age = 30
|
||||||
|
|
Loading…
Reference in New Issue
Block a user