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