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中pygame模块的Linux下安装过程(详解)
Nov 09 Python
python+opencv轮廓检测代码解析
Jan 05 Python
python使用tkinter实现简单计算器
Jan 30 Python
详解如何在python中读写和存储matlab的数据文件(*.mat)
Feb 24 Python
python+opencv识别图片中的圆形
Mar 25 Python
Python正则表达式和元字符详解
Nov 29 Python
Python基于mysql实现学生管理系统
Feb 21 Python
Python面向对象原理与基础语法详解
Jan 02 Python
DataFrame 数据合并实现(merge,join,concat)
Jun 14 Python
keras中的History对象用法
Jun 19 Python
Python中常用的os操作汇总
Nov 05 Python
python 调用js的四种方式
Apr 11 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
全国FM电台频率大全 - 28 甘肃省
2020/03/11 无线电
IIS php环境配置PHP5 MySQL5 ZendOptimizer phpmyadmin安装与配置
2008/11/18 PHP
PHP通过插入mysql数据来实现多机互锁实例
2014/11/05 PHP
ThinkPHP表单令牌错误的相关解决方法分析
2016/05/20 PHP
12款经典的白富美型—jquery图片轮播插件—前端开发必备
2013/01/08 Javascript
js获取下拉列表框中的value和text的值示例代码
2014/01/11 Javascript
javascript自定义右键弹出菜单实现方法
2015/05/25 Javascript
使用JavaScript的AngularJS库编写hello world的方法
2015/06/23 Javascript
jQuery实现带玻璃流光质感的手风琴特效
2015/11/20 Javascript
jQuery Mobile框架中的表单组件基础使用教程
2016/05/17 Javascript
Angular实现的内置过滤器orderBy排序与模糊查询功能示例
2017/12/29 Javascript
node作为中间服务层如何发送请求(发送请求的实现方法详解)
2018/01/02 Javascript
解决layer弹出层中表单不起作用的问题
2019/09/09 Javascript
微信小程序动态评分展示/五角星展示/半颗星展示/自定义长度展示功能的实现
2020/07/22 Javascript
python基础教程之Hello World!
2014/08/29 Python
python判断windows系统是32位还是64位的方法
2015/05/11 Python
python列出目录下指定文件与子目录的方法
2015/07/03 Python
Python内置函数OCT详解
2016/11/09 Python
Python使用内置json模块解析json格式数据的方法
2017/07/20 Python
Python中生成器和迭代器的区别详解
2018/02/10 Python
Django 跨域请求处理的示例代码
2018/05/02 Python
在Python中使用gRPC的方法示例
2018/08/08 Python
利用Python复制文件的9种方法总结
2019/09/02 Python
Pycharm+Python工程,引用子模块的实现
2020/03/09 Python
Keras实现支持masking的Flatten层代码
2020/06/16 Python
Python用SSH连接到网络设备
2021/02/18 Python
CSS3中HSL和HSLA的简单使用示例
2015/07/14 HTML / CSS
friso美素佳儿官方海外旗舰店:荷兰原产原罐
2017/07/03 全球购物
大学毕业生的自我鉴定
2013/11/30 职场文书
2014年乡镇卫生院工作总结
2014/11/24 职场文书
给客户的感谢信
2015/01/21 职场文书
2015年秋学期教研工作总结
2015/10/14 职场文书
python调用ffmpeg命令行工具便捷操作视频示例实现过程
2021/11/01 Python
Python中Numpy和Matplotlib的基本使用指南
2021/11/02 Python
微信小程序APP的事件绑定以及传递参数时的冒泡和捕获
2022/04/19 Javascript
Java实现HTML转为Word的示例代码
2022/06/28 Java/Android