Home >Backend Development >Python Tutorial >Analysis on the implementation and usage of custom events in wxpython

Analysis on the implementation and usage of custom events in wxpython

不言
不言Original
2018-05-16 16:27:062399browse

The examples in this article describe the implementation and use of custom events in wxpython. Share it with everyone for your reference, as follows:

Steps to create a custom event:

① Define the event class, which must inherit from wx.PyCommandEvent, and define get and set methods to obtain and set event parameters .

② Create an event type and a binder object to bind the event to a specific object.

③ Create a custom event object, set event parameters, and use the ProcessEvent() method to introduce this instance into the event processing system.

④ Bind the event handler of the custom event.

⑤ Respond to events in the event handler.

Sample code:

#!/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:

1. Define the MyTestEvent class as a subclass of wx.PyCommandEvent. wx.PyCommandEvent is a wxPython-specific structure that can be used to create new event classes And you can connect C++ classes with your Python code.

2. wx.NewEventType() is similar to wx.NewId(); it returns a unique event type ID.

3. Create a binder object. The value of the second parameter is between [0,2]. It represents the wxId identification number. This identification number is used by the wx.EvtHandler.Bind() method to determine which object is the source of the event.

4. Bind event handler.

5. Create a custom event object and pass the ID of the control that triggered the event as a parameter to the constructor of MyTestEvent.

6. Add data to the event. You can pass some of the information you need through this method.

7. The call to ProcessEvent() introduces this new event into the event processing system. The call to GetEventHandler() returns an instance of wx.EvtHandler, which is the window object itself, namely: MyFrame.

8. Bind the event processing function. The event processing method here is to display the incoming event parameters through MessageDialog.

I hope this article will be helpful to everyone in Python programming.

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn