ホームページ > バックエンド開発 > Python チュートリアル > wxpythonにおけるカスタムイベントの実装と使用法に関する分析

wxpythonにおけるカスタムイベントの実装と使用法に関する分析

不言
リリース: 2018-05-16 16:27:06
オリジナル
2437 人が閲覧しました

この記事の例では、wxpython でのカスタム イベントの実装と使用について説明します。次のように、参考として全員と共有してください:

カスタム イベントを作成する手順:

① wx.PyCommandEvent から継承する必要があるイベント クラスを定義し、イベント パラメーターを取得および設定するための get メソッドと set メソッドを定義します。 。

② イベントタイプとバインダーオブジェクトを作成し、イベントを特定のオブジェクトにバインドします。

③ カスタム イベント オブジェクトを作成し、イベント パラメーターを設定し、ProcessEvent() メソッドを使用してこのインスタンスをイベント処理システムに導入します。

④ カスタムイベントのイベントハンドラーをバインドします。

⑤ イベントハンドラーでイベントに応答します。 sampleコード:

#!/usr/bin/env python
#coding=utf-8
import wx
class MyTestEvent(wx.PyCommandEvent):  #1 定义事件
  def __init__(self, evtType, id):
    wx.PyCommandEvent.__init__(self, evtType, id)
    self.eventArgs = ""
  def GetEventArgs(self):
    return self.eventArgs
  def SetEventArgs(self, args):
    self.eventArgs = args
myEVT_MY_TEST = wx.NewEventType() #2 创建一个事件类型
EVT_MY_TEST = wx.PyEventBinder(myEVT_MY_TEST, 1) #3 创建一个绑定器对象
class MyFrame(wx.Frame):
  def __init__(self):
    wx.Frame.__init__(self, None, -1, "My Frame", size=(300, 300),pos=(300,300))
    panel = wx.Panel(self, -1)
    self.button1 = wx.Button(panel,id=-1,pos=(40, 40),label="button1")
    self.Bind(wx.EVT_BUTTON, self.OnButton1Click, self.button1)
    self.Bind(EVT_MY_TEST, self.OnHandle)# 4绑定事件处理函数
  def OnButton1Click(self,event):
    self.OnDoTest()
  def OnHandle(self,event):#8 事件处理函数
    dlg = wx.MessageDialog(self, event.GetEventArgs(),'A Message Box',wx.OK | wx.ICON_INFORMATION)
    dlg.ShowModal()
    dlg.Destroy()
  def OnDoTest(self):
    evt = MyTestEvent(myEVT_MY_TEST, self.button1.GetId()) #5 创建自定义事件对象
    evt.SetEventArgs("test event")  # 6添加数据到事件
    self.GetEventHandler().ProcessEvent(evt) #7 处理事件
if __name__ == '__main__':
  app = wx.PySimpleApp()
  frame = MyFrame()
  frame.Show(True)
  app.MainLoop()
ログイン後にコピー
-instructions:mytesteventクラスをwx.pycommandeventのサブクラスとして定義します。イベント クラス また、C++ クラスを Python コードに接続できます。

2. wx.NewEventType() は wx.NewId() に似ており、一意のイベント タイプ ID を返します。 3. 2 番目のパラメーターの値は [0,2] の間であり、この識別番号は wx.EvtHandler.Bind() メソッドによって使用されます。イベントのソース。

4. イベントハンドラーをバインドします。

5. カスタム イベント オブジェクトを作成し、イベントをトリガーしたコントロールの ID をパラメーターとして MyTestEvent のコンストラクターに渡します。

6. イベントにデータを追加します。このメソッドを通じて、必要な情報の一部を渡すことができます。 7. ProcessEvent() への呼び出しは、この新しいイベントをイベント処理システムに導入します。 GetEventHandler() への呼び出しは、ウィンドウ オブジェクト自体である wx.EvtHandler のインスタンス、つまり MyFrame を返します。

8. イベント処理関数をバインドする ここでのイベント処理方法は、MessageDialog を通じて受信イベント パラメーターを表示することです。

この記事が Python プログラミングのすべての人に役立つことを願っています。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート