2009-10-27 43 views
0

如果使用來自同一線程的wxPostEvent/wxCallAfter發佈多個事件,例如點擊按鈕時,他們應該按照相同的順序處理?是否按順序發佈wxPython事件?

在下面的例子wx.Callafter被用於發佈事件,最終將調用回調函數,將它們在相同的順序被調用,它們被傳遞給wx.CallAfter

def onbutton(self, event): 
    wx.CallAfter(func1) 
    # some more code 
    wx.CallAfter(func2) 

回答

0

CallAfter將事件發佈到事件隊列,並應按順序處理這些事件。儘管如此,它們是在空閒事件上處理的,而不是基於函數完成的,所以func2可以在func1之前處理,這取決於空閒事件的時間(例如wx.Yield等)。關於這個問題的討論here,看起來它可能有點棘手。

+1

我也發佈了同樣的問題到wxpython郵件列表,羅賓有一個很好的答案http://groups.google.com/group/wxpython-users/browse_thread/thread/67d059c3f984b87f# – 2009-10-28 09:00:10

+0

是的,羅賓的是一個很好的答案。不過,值得看看我提到的這個線程部分:http://aspn.activestate.com/ASPN/Mail/Message/wxpython-users/3483407。在這裏,它不是顯而易見的Yield語句,或者不太明顯的模型對話框,但也是一個繪畫事件,因爲它是無序排隊的。 – tom10 2009-10-28 14:46:58

0

我相信它應該得到保證。我有一些代碼可以從線程中的串口抓取數據,併爲wx處理事件。即使以115kbps接收數據 - 在處理數據之前無疑會觸發多個事件 - 當wx呼叫我的處理程序打印/註銷數據時,數據依次顯示。