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

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

不言
不言オリジナル
2018-05-16 16:27:062346ブラウズ

この記事の例では、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 プログラミングのすべての人に役立つことを願っています。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。