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 相关文章推荐
django 自定义用户user模型的三种方法
Nov 18 Python
python通过文件头判断文件类型
Oct 30 Python
Python实现带百分比的进度条
Jun 28 Python
Python列表切片用法示例
Apr 19 Python
Python如何快速上手? 快速掌握一门新语言的方法
Nov 14 Python
你真的了解Python的random模块吗?
Dec 12 Python
python之matplotlib学习绘制动态更新图实例代码
Jan 23 Python
Python2中文处理纪要的实现方法
Mar 10 Python
点球小游戏python脚本
May 22 Python
Python for循环生成列表的实例
Jun 15 Python
详解python 内存优化
Aug 17 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
PHP7新特性foreach 修改示例介绍
2016/08/26 PHP
php图形jpgraph操作实例分析
2017/02/22 PHP
php+mysql+ajax 局部刷新点赞/取消点赞功能(每个账号只点赞一次)
2020/07/24 PHP
繁简字转换功能
2006/07/19 Javascript
发布一个高效的JavaScript分析、压缩工具 JavaScript Analyser
2007/11/30 Javascript
nodejs中转换URL字符串与查询字符串详解
2014/11/26 NodeJs
NodeJS学习笔记之Http模块
2015/01/13 NodeJs
javascript通过元素id和name直接取得元素的方法
2015/04/28 Javascript
vue实现todolist单页面应用
2017/04/11 Javascript
微信小程序实现底部导航
2018/11/05 Javascript
turn.js异步加载实现翻书效果
2019/07/25 Javascript
Vue路由守卫之路由独享守卫
2019/09/25 Javascript
使用Vue-cli 中为单独页面设置背景图片铺满全屏
2020/07/17 Javascript
python开发之字符串string操作方法实例详解
2015/11/12 Python
Python列表常见操作详解(获取,增加,删除,修改,排序等)
2019/02/18 Python
对python周期性定时器的示例详解
2019/02/19 Python
Django使用AJAX调用自己写的API接口的方法
2019/03/06 Python
pandas 缺失值与空值处理的实现方法
2019/10/12 Python
PyCharm使用之配置SSH Interpreter的方法步骤
2019/12/26 Python
基于Numba提高python运行效率过程解析
2020/03/02 Python
python矩阵运算,转置,逆运算,共轭矩阵实例
2020/05/11 Python
用python制作个音乐下载器
2021/01/30 Python
详解python日志输出使用配置文件格式
2021/02/10 Python
html5的新增的标签和废除的标签简要概述
2013/02/20 HTML / CSS
高档奢华时装在线目的地:FORWARD by elyse walker
2017/10/16 全球购物
Coltorti Boutique官网:来自意大利的设计师品牌买手店
2018/11/09 全球购物
Fnac西班牙官网:法国文化和电子产品零售商
2021/03/14 全球购物
Sisley法国希思黎美国官方网站:享誉全球的奢华植物美容品牌
2020/06/27 全球购物
中专生自我鉴定范文
2013/12/19 职场文书
车贷收入证明范本
2014/01/09 职场文书
《黄河颂》教学反思
2014/02/07 职场文书
合同协议书格式
2014/04/18 职场文书
模具设计与制造专业求职信
2014/07/19 职场文书
小学科学教学计划
2015/01/21 职场文书
pytorch通过训练结果的复现设置随机种子
2021/06/01 Python
详解MongoDB排序时内存大小限制与创建索引的注意事项
2022/05/06 MongoDB