0
我有一個分散在我的程序中的事件。每當我們對數據庫進行更改時,我們都會觸發ModelChanged事件,其中包含任意信息,然後由各種GUI元素拾取以更新屏幕。但是,我正在做一些關於如何工作的重構。一旦它被觸發,GUI元素不會捕獲事件,我希望暫停它直到發生另一事件。所以,與其這樣:如何在將事件釋放給與之綁定的事件之前對其進行排隊
火災事件 - >綁定接收事件
我希望它這樣做:
火災事件 - >等待另一個單獨的事件,火災 - >綁定接收原始事件。
下面是一些代碼:
打印到控制檯import wxversion
wxversion.select(['3.0', '2.8'])
import wx
import wx.lib.newevent
OriginalEvent, ORIGINAL_EVT = wx.lib.newevent.NewEvent()
ReleaseEvent, RELEASE_EVT = wx.lib.newevent.NewEvent()
class MyFrame(wx.Frame):
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, title=title, size=(200,100))
self.sizer = wx.BoxSizer(wx.VERTICAL)
self.fireOriginalBtn = wx.Button(self, wx.ID_ANY, "Fire Event")
self.fireOriginalBtn.Bind(wx.EVT_BUTTON, self.fireOriginal)
self.releaseEventBtn = wx.Button(self, wx.ID_ANY, "Release Event")
self.releaseEventBtn.Bind(wx.EVT_BUTTON, self.releaseEvent)
self.sizer.Add(self.fireOriginalBtn, 1, wx.EXPAND)
self.sizer.Add(self.releaseEventBtn, 1, wx.EXPAND)
self.SetSizer(self.sizer)
self.SetAutoLayout(1)
self.sizer.Fit(self)
self.Bind(ORIGINAL_EVT, self.captureOriginal)
self.Bind(RELEASE_EVT, self.captureRelease)
self.Show(True)
def fireOriginal(self, evt):
wx.PostEvent(self, OriginalEvent(myInfo=[1,2,3,4]))
def releaseEvent(self, evt):
wx.PostEvent(self, ReleaseEvent())
def captureOriginal(self, evt):
print "Event captured"
def captureRelease(self, evt):
print "Release captured"
app = wx.App(False)
frame = MyFrame(None, 'Small editor')
app.MainLoop()
目前,當你點擊火災事件,你會得到的文本。我希望能夠點擊「火災事件」按鈕,但等到我的框架獲取原始事件並打印到控制檯之前單擊「發佈事件」按鈕。
我不太瞭解如何編寫自己的事件類 - 也許有些事情我可以重寫來告訴它什麼時候發出事件,而粗略的看不到任何地方。有什麼建議麼?
謝謝!
這是你可以用'wx.EVT_IDLE'來代替嗎? – otterb
不,不是真的 - https://wxpython.org/docs/api/wx.IdleEvent-class.html –