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 NumPy库安装使用笔记
May 18 Python
Python3读取zip文件信息的方法
May 22 Python
Python制作简易注册登录系统
Dec 15 Python
[原创]教女朋友学Python(一)运行环境搭建
Nov 29 Python
理解python中生成器用法
Dec 20 Python
python3实现跳一跳点击跳跃
Jan 08 Python
Python socket实现简单聊天室
Apr 01 Python
对Django外键关系的描述
Jul 26 Python
Django rstful登陆认证并检查session是否过期代码实例
Aug 13 Python
Pytorch之保存读取模型实例
Dec 30 Python
python 下划线的多种应用场景总结
May 12 Python
Python几种酷炫的进度条的方式
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
VML绘图板②脚本--VMLgraph.js、XMLtool.js
2006/10/09 PHP
如何批量替换相对地址为绝对地址(利用bat批处理实现)
2013/05/27 PHP
检查用户名是否已在mysql中存在的php写法
2014/01/20 PHP
PHP中创建和验证哈希的简单方法实探
2015/07/06 PHP
PHP简单实现断点续传下载的方法
2015/09/25 PHP
在PHP站点的页面上添加Facebook评论插件的实例教程
2016/01/08 PHP
Yii框架实现对数据库的CURD操作示例
2019/09/03 PHP
地震发生中逃生十大法则
2008/05/12 Javascript
推荐17个优美新鲜的jQuery的工具提示插件
2012/09/14 Javascript
使用jquery修改表单的提交地址基本思路
2014/06/04 Javascript
谈谈JavaScript中的几种借用方法
2016/08/09 Javascript
bootstrap模态框实现拖拽效果
2016/12/14 Javascript
JavaScript设计模式之代理模式详解
2017/06/09 Javascript
Ionic3实现图片瀑布流布局
2017/08/09 Javascript
vue、react等单页面项目应该这样子部署到服务器
2018/01/03 Javascript
JS实现点击拉拽轮播图pc端移动端适配
2018/09/05 Javascript
使用nodeJS中的fs模块对文件及目录进行读写,删除,追加,等操作详解
2020/02/06 NodeJs
extjs图形绘制之饼图实现方法分析
2020/03/06 Javascript
[01:55]TI9显影之尘系列 - Evil Geniuses
2019/08/22 DOTA
Python比较两个图片相似度的方法
2015/03/13 Python
python字符串对其居中显示的方法
2015/07/11 Python
python进行两个表格对比的方法
2018/06/27 Python
Python 获取主机ip与hostname的方法
2018/12/17 Python
Pyqt5实现英文学习词典
2019/06/24 Python
使用pyhon绘图比较两个手机屏幕大小(实例代码)
2020/01/03 Python
python实现引用其他路径包里面的模块
2020/03/09 Python
美国饼干礼物和美食甜点购买网站:Cheryl’s
2020/05/28 全球购物
Expedia瑞典官网:预订度假屋、酒店、汽车租赁、机票等
2021/01/23 全球购物
小学校园活动策划
2014/01/30 职场文书
计算机科学系职业生涯规划书
2014/03/08 职场文书
2014年财务部工作总结
2014/11/11 职场文书
自我评价优缺点范文
2015/03/11 职场文书
2015年学校教务处工作总结
2015/05/11 职场文书
励志语录:时光飞逝,请学会珍惜所有的人和事
2020/01/16 职场文书
Javascript中的解构赋值语法详解
2021/04/02 Javascript
Python万能模板案例之matplotlib绘制直方图的基本配置
2022/04/13 Python