diff --git a/appPublic/eventproperty.py b/appPublic/eventproperty.py new file mode 100644 index 0000000..8783bf9 --- /dev/null +++ b/appPublic/eventproperty.py @@ -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 +