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 简单备份文件脚本v1.0的实例
Nov 06 Python
pandas 对series和dataframe进行排序的实例
Jun 09 Python
win10系统下Anaconda3安装配置方法图文教程
Sep 19 Python
浅谈python连续赋值可能引发的错误
Nov 10 Python
django模板结构优化的方法
Feb 28 Python
python 字典有序并写入json文件过程解析
Sep 30 Python
给Python学习者的文件读写指南(含基础与进阶)
Jan 29 Python
python报错: 'list' object has no attribute 'shape'的解决
Jul 15 Python
通过案例解析python鸭子类型相关原理
Oct 10 Python
DRF使用simple JWT身份验证的实现
Jan 14 Python
Python3使用Selenium获取session和token方法详解
Feb 16 Python
基于PyQT5制作一个桌面摸鱼工具
Feb 15 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&java(二)
2006/10/09 PHP
PHP读MYSQL中文乱码的解决方法
2006/12/17 PHP
模板引擎正则表达式调试小技巧
2011/07/20 PHP
php下载文件的代码示例
2012/06/29 PHP
PHP 自定义错误处理函数的使用详解
2013/05/10 PHP
有关PHP性能优化的介绍
2013/06/20 PHP
PHP实现PDO的mysql数据库操作类
2014/12/12 PHP
Yii2前后台分离及migrate使用(七)
2016/05/04 PHP
漂亮的thinkphp 跳转页封装示例
2019/10/16 PHP
js bind 函数 使用闭包保存执行上下文
2011/12/26 Javascript
让浏览器DOM元素最后加载的js方法
2014/07/29 Javascript
Javascript闭包用法实例分析
2015/01/23 Javascript
JQUERY实现网页右下角固定位置展开关闭特效的方法
2015/07/27 Javascript
js实现4个方向滚动的球
2017/03/06 Javascript
基于vue.js实现侧边菜单栏
2017/03/20 Javascript
详解webpack3编译兼容IE8的正确姿势
2017/12/21 Javascript
mpvue微信小程序多列选择器用法之省份城市选择的实现
2019/03/07 Javascript
js实现for循环跳过undefined值示例
2019/07/02 Javascript
jQuery+css实现的点击图片放大缩小预览功能示例【图片预览 查看大图】
2020/05/29 jQuery
[03:32]2014DOTA2西雅图邀请赛 CIS外卡赛赛前black专访
2014/07/09 DOTA
[01:09:23]KG vs TNC 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
python进阶教程之词典、字典、dict
2014/08/29 Python
13个最常用的Python深度学习库介绍
2017/10/28 Python
Win7下Python与Tensorflow-CPU版开发环境的安装与配置过程
2018/01/04 Python
python微信好友数据分析详解
2018/11/19 Python
keras 指定程序在某块卡上训练实例
2020/06/22 Python
python3.9实现pyinstaller打包python文件成exe
2020/12/13 Python
Pandas数据分析的一些常用小技巧
2021/02/07 Python
SIMON MILLER官网:洛杉矶的生活方式品牌
2020/10/19 全球购物
小学运动会广播稿200字(十二篇)
2014/01/14 职场文书
优秀教师先进材料
2014/12/16 职场文书
网络营销计划书
2015/01/17 职场文书
会议主持词结束语
2015/07/03 职场文书
中学政教处工作总结
2015/08/13 职场文书
乡镇团代会开幕词
2016/03/04 职场文书
python 中yaml文件用法大全
2021/07/04 Python