wxpython中自定义事件的实现与使用方法分析


Posted in Python onJuly 21, 2016

本文实例讲述了wxpython中自定义事件的实现与使用方法。分享给大家供大家参考,具体如下:

创建自定义事件的步骤:

① 定义事件类,该事件类必须继承自wx.PyCommandEvent,并定义get和set方法来获取和设置事件参数。

② 创建一个事件类型和一个绑定器对象去绑定该事件到特定的对象。

③ 创建自定义事件对象,设置事件参数,并且使用ProcessEvent()方法将这个实例引入事件处理系统。

④ 绑定自定义事件的event handler。

⑤ 在event handler中响应事件。

示例代码:

#!/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()

说明:

1.定义MyTestEvent 类为wx.PyCommandEvent的子类,wx.PyCommandEvent是wxPython特定的结构,可以用来创建新的事件类并且可以把C++类和你的Python代码连接起来。

2. wx.NewEventType()类似于wx.NewId();它返回一个唯一的事件类型ID。

3.创建一个绑定器对象,第二个参数的取值位于[0,2]之间,它代表wxId标识号,该标识号用于wx.EvtHandler.Bind()方法去确定哪个对象是事件的源。

4.绑定事件的处理器。

5. 创建自定义事件对象,并把触发事件的控件的ID作为参数传给MyTestEvent的构造函数。

6.添加数据给事件。可以将一些您需要的信息通过这种方法传递进去。

7. ProcessEvent()的调用将这个新事件引入到事件处理系统中,GetEventHandler()调用返回wx.EvtHandler的一个实例,也就是窗口对象本身,即:MyFrame。

8.绑定事件处理函数,这里的事件处理方式是通过MessageDialog显示出传入的事件参数。

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python基础教程之实现石头剪刀布游戏示例
Feb 11 Python
Python第三方库xlrd/xlwt的安装与读写Excel表格
Jan 21 Python
Python操作MySQL数据库的三种方法总结
Jan 30 Python
Django添加feeds功能的示例
Aug 07 Python
python 字典修改键(key)的几种方法
Aug 10 Python
Python 字符串类型列表转换成真正列表类型过程解析
Aug 26 Python
Python统计分析模块statistics用法示例
Sep 06 Python
python tkinter组件摆放方式详解
Sep 16 Python
Pycharm中出现ImportError:DLL load failed:找不到指定模块的解决方法
Sep 17 Python
Python3 io文本及原始流I/O工具用法详解
Mar 23 Python
Python datetime模块使用方法小结
Jun 18 Python
Python通过getattr函数获取对象的属性值
Oct 16 Python
wxpython中Textctrl回车事件无效的解决方法
Jul 21 #Python
Python实现Sqlite将字段当做索引进行查询的方法
Jul 21 #Python
python装饰器初探(推荐)
Jul 21 #Python
python魔法方法-自定义序列详解
Jul 21 #Python
浅谈Python 字符串格式化输出(format/printf)
Jul 21 #Python
分享python数据统计的一些小技巧
Jul 21 #Python
python中print的不换行即时输出的快速解决方法
Jul 20 #Python
You might like
PHP容易忘记的知识点分享
2013/04/30 PHP
ubuntu12.04使用c编写php扩展模块教程分享
2013/12/25 PHP
PHP中file_exists()判断中文文件名无效的解决方法
2014/11/12 PHP
php动态生成版权所有信息的方法
2015/03/24 PHP
PHP利用Socket获取网站的SSL证书与公钥
2017/06/18 PHP
PHP实现从上往下打印二叉树的方法
2018/01/18 PHP
PHP中in_array的隐式转换的解决方法
2018/03/06 PHP
js中的getAttribute方法使用示例
2014/08/01 Javascript
jquery轮播的实现方式 附完整实例
2016/07/28 Javascript
JS实现的数字格式化功能示例
2017/02/10 Javascript
Express之get,pos请求参数的获取
2017/05/02 Javascript
nodejs socket实现的服务端和客户端功能示例
2017/06/02 NodeJs
javascript函数的节流[throttle]与防抖[debounce]
2017/11/15 Javascript
vue-infinite-loading2.0 中文文档详解
2018/04/08 Javascript
jQuery对底部导航进行跳转并高亮显示的实例代码
2019/04/23 jQuery
小程序封装路由文件和路由方法(5种全解析)
2019/05/26 Javascript
浅谈vue3中effect与computed的亲密关系
2019/10/10 Javascript
JS实现简单日历特效
2020/01/03 Javascript
解决vue中的无限循环问题
2020/07/27 Javascript
JSON文件及Python对JSON文件的读写操作
2018/10/07 Python
Python xlrd excel文件操作代码实例
2020/03/10 Python
Opencv图像处理:如何判断图片里某个颜色值占的比例
2020/06/03 Python
Python识别处理照片中的条形码
2020/11/16 Python
CSS3中31种选择器使用方法教程
2013/12/05 HTML / CSS
css3的transition属性详解
2014/12/15 HTML / CSS
构造方法和其他方法的区别?怎么调用父类的构造方法
2013/09/22 面试题
西式婚礼证婚词
2014/01/12 职场文书
中学生个人自我评价
2014/02/06 职场文书
趣味体育活动方案
2014/02/08 职场文书
大学生职业生涯规划大赛作品(精品)
2014/09/17 职场文书
幼儿园大班见习报告
2014/10/31 职场文书
运动会加油稿20字
2014/11/15 职场文书
Golang 使用Map实现去重与set的功能操作
2021/04/29 Golang
利用Pycharm连接服务器的全过程记录
2021/07/01 Python
mysql数据库实现设置字段长度
2022/06/10 MySQL
Nginx报404错误的详细解决方法
2022/07/23 Servers