2020年12月7日

Python版本的Event-Handler

之前寫Qt時,connect-slot用得很開心,看c#才知道原來這個設計稱之為Event-Handler,
基本上,UI Framework很多都用Event-Handler設計的。

在Python上,因為先前程式複雜度還沒這麼高,也沒有UI需求,因此一直沒有玩Event-Handler,
最近心血來潮找了下,把用法和sample code貼出來。

Python版本的Event-Handler (connect-slots),要先安裝套件events
使用步驟:
1. 設定Signal function Name
self.events = Events(('on_change', 'on_trigger'))
on_change, on_trigger都是Signal function Name

2. 發出Signal的來源端要把Events指定進去(Slot端不用)
self.button = Button(self.events)
self.display = Display()

3. 實做Slot function
class Display:
.....
def show_button(self, num):
self.NUMBER = num
.....

4. Slot functionSignal function連結
self.events.on_change += self.display.show_button

5. 觸發Signal function
class Button:
.....
EVENTS = None
.....
def __init__(self, events):
self.EVENTS = events
.....
def run(self):
.....
self.EVENTS.on_change(6)
.....
看得出來沒有Thread-Safe,因此如果要用在多執行緒內,要另外加上mutex