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使用新浪微博api上传图片到微博示例
Jan 10 Python
python集合类型用法分析
Apr 08 Python
SVM基本概念及Python实现代码
Dec 27 Python
浅谈Python基础—判断和循环
Mar 22 Python
详解Python 解压缩文件
Apr 09 Python
Python面向对象之类的封装操作示例
Jun 08 Python
Django异步任务线程池实现原理
Dec 17 Python
python实现简单飞行棋
Feb 06 Python
python GUI库图形界面开发之PyQt5动态加载QSS样式文件
Feb 25 Python
Django框架配置mysql数据库实现过程
Apr 22 Python
python自动化发送邮件实例讲解
Jan 04 Python
matplotlib相关系统目录获取方式小结
Feb 03 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 Hash函数,增强密码安全
2011/02/25 PHP
动态表单验证的操作方法和TP框架里面的ajax表单验证
2017/07/19 PHP
PHP pthreads v3使用中的一些坑和注意点分析
2020/02/21 PHP
js 单引号 传递方法
2009/06/22 Javascript
基于jquery的大众点评,分类导航实现代码
2011/08/23 Javascript
禁止选中文字兼容IE、Chrome、FF等
2013/09/04 Javascript
Javascript脚本实现静态网页加密实例代码
2013/11/05 Javascript
jQuery中detach()方法用法实例
2014/12/25 Javascript
JavaScript设置、获取、清除单值和多值cookie的方法
2015/11/17 Javascript
浅谈js里面的InttoStr和StrtoInt
2016/06/14 Javascript
jQuery实现鼠标经过购物车出现下拉框代码(推荐)
2016/07/21 Javascript
jQuery实现的placeholder效果完整实例
2016/08/02 Javascript
使用jQuery5分钟快速搞定双色表格的简单实例
2016/08/08 Javascript
原生js简单实现放大镜特效
2017/05/16 Javascript
DatePickerDialog 自定义样式及使用全解
2019/07/09 Javascript
小程序跨页面交互的作用与方法详解
2020/01/07 Javascript
Vue通过Blob对象实现导出Excel功能示例代码
2020/07/31 Javascript
React 条件渲染最佳实践小结(7种)
2020/09/27 Javascript
vue组件实现移动端九宫格转盘抽奖
2020/10/16 Javascript
python实现从字符串中找出字符1的位置以及个数的方法
2014/08/25 Python
深入浅析python继承问题
2016/05/29 Python
Python增量循环删除MySQL表数据的方法
2016/09/23 Python
Python OS模块实例详解
2019/04/15 Python
使用Dajngo 通过代码添加xadmin用户和权限(组)
2020/07/03 Python
三八妇女节活动主持词
2014/03/17 职场文书
房屋委托书范本
2014/04/04 职场文书
国庆宣传标语
2014/06/30 职场文书
食堂厨师岗位职责
2014/08/25 职场文书
领导干部群众路线剖析材料
2014/10/09 职场文书
学校党的群众路线教育实践活动制度建设计划
2014/11/03 职场文书
法院个人总结
2015/03/03 职场文书
2015年大学生暑期实习报告
2015/07/13 职场文书
妇产科护理心得体会
2016/01/22 职场文书
简历自我评价范文
2019/04/24 职场文书
MySQL 使用事件(Events)完成计划任务
2021/05/24 MySQL
SpringBoot整合Redis入门之缓存数据的方法
2021/11/17 Redis