wxpython筆記 Wxpython事件處理機制

2022-04-03 04:01:55 字數 2116 閱讀 8894

在wxpython中關於事件的名稱解釋:

在wxpython中,代表事件的是事件物件。事件物件是類wx.event或其子類的乙個例項。

父類wx.event相對小且抽象,它只是包含了對所有事件的一些通常的資訊。wx.event的各個子類都新增了更多的資訊。

乙個事件類可以有多個事件型別,每個都對應於乙個不同的用 戶行為

以下是wx.event的重要的子類(事件類) :

事件繫結器被用於將乙個wxpython視窗部件(事件源)與乙個事件物件和乙個處理器函式連線起來。

這個連線使得wxpython系統能夠通過執行處理器函式中的** 來響應相應視窗部件上的事件。

在wxpython中,任何能夠響應事件的物件都是 wx.evthandler的子類。

所有視窗物件都是wx.evthandler的子類,因些在wxpython應用程式中的每個視窗部件都能夠響應事件。wx.evthandler有乙個方法是bind(),它建立事件繫結。該方法的用法如下:

bind(event,handler,source=none,id=wx.id_any,id2=wx.id_any)
bind()函式將乙個事件和乙個物件與乙個事件處理器函式關聯起來。

最常使用的wx.evthandler的方法:

從使用者的角度上來看,wxpython程式大部分時間什麼也不做,一直閒著直 到使用者或系統做了些什麼來觸發這個wxpython程式動作。

wxpython程式的結構 就是乙個事件驅動程式體系的例子。

圖3.1是事件處理迴圈的示意,它展示了主程式的生命、使用者事件、和分派到的處理器函式。

事件處理過程開始於觸發事件的物件。通常,wxpython首先在觸發物件中查詢匹配事件型別的被繫結的處理器函式。如果找到,則相應的方法被執行。

否則,wxpython將檢查該事件是否傳送到了上一級的容器。如果是的話,父視窗部件將被檢查,這樣一級一級向上尋找,直到wxpython找到了乙個處理器函 數或到達了頂級視窗。

如果事件沒有傳播,在處理過程完成之前,wxpython仍將為了處理器函式而檢查應用程式物件。

第一步,建立事件

事件首先被交給建立事件的物件。對於按鈕敲擊,這個物件是按鈕;對於滑鼠進入事件,這個物件是所進入的視窗部件。

第二步,確定事件物件是否被允許處理事件

通過呼叫wx.evthandler的setevthandlerenabled(boolean)方法,乙個視窗可以被設定為允許或不允許事件處理。不允許事件處理的結果是該視窗部件在事 件處理中被完全繞過,與該物件關聯的繫結物件也不會被搜尋,並且在這步中 的處理沒有向下的分支。

第三步 定位繫結器物件

然後processevent()方法尋找乙個繫結器物件,該繫結器物件確定當前物件和事件型別之間的繫結。

如果物件自身的繫結器沒有被找到,那麼向上到該物件的超類中去尋找。 如果乙個繫結器物件被發現,wxpython呼叫相關的處理器函式。在處理器被呼叫後,該事件的事件處理停止,除非處理器函式顯式地要求作更多的處理

第四步 決定是否繼續處理

在呼叫了第乙個事件處理器之後,wxpython檢視是否有進一步的處理要 求。事件處理器通過呼叫wx.event的方法skip()要求更多的處理。如果skip()方法被呼叫,那麼處理將繼續,並且任何定義在超類中的處理器在這一步中被發現並執行。

第五步 決定是否展開

乙個事件是否向上展開至容器級,這是每個事件例項的乙個動態屬性,儘管實際上預設值幾乎總是使用那幾個。預設情況,只有wx.commandevent及其 子類的例項向上展開至容器級。其它的所有事件不這樣做。

wxPython學習筆記1

1.從wxpython匯入其它任何東西之前必須先導入wx,即import wx。這是因為wxpython要對別的wxpython模組執行一些初始化工作。4.當乙個模組中的第一句是字串的時候,這個字串就成了該模組的文件字串並儲存在改模組的 doc 屬性中 可以用modulename.doc 來訪問該文...

wxpython 右鍵選單 wxPython

import wx class twobuttonevent wx.pycommandevent 定義事件類twobuttonevent def init self,evttype,id 初始化 wx.pycommandevent.init self,evttype,id self.clickcou...

wxPython學習筆記(二 入門)

1.wx.frame是最常用的部件之一,可以包含任何非frame和dialog的視窗,它包含乙個title條,邊框以及乙個 的容器區域,title條和邊框可以通過標誌隱藏 2.wx.frame的建構函式如下 wx.frame wx.window parent,int id 1,string titl...