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的几种开发工具介绍
Mar 07 Python
python 删除指定时间间隔之前的文件实例
Apr 24 Python
TensorFlow的权值更新方法
Jun 14 Python
Python引用计数操作示例
Aug 23 Python
浅析python的优势和不足之处
Nov 20 Python
python实现合并多个list及合并多个django QuerySet的方法示例
Jun 11 Python
使用PyTorch训练一个图像分类器实例
Jan 08 Python
Python3-异步进程回调函数(callback())介绍
May 02 Python
通过Python实现一个简单的html页面
May 16 Python
Python HTMLTestRunner库安装过程解析
May 25 Python
Python爬虫爬取新闻资讯案例详解
Jul 14 Python
Python confluent kafka客户端配置kerberos认证流程详解
Oct 12 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
c#中的实现php中的preg_replace
2009/12/21 PHP
PHP CURL或file_get_contents获取网页标题的代码及两者效率的稳定性问题
2015/11/30 PHP
用Javascript实现UTF8编码转换成gb2312编码
2006/12/22 Javascript
js表格分页实现代码
2009/09/18 Javascript
window.location 对象所包含的属性
2014/10/10 Javascript
JS实现支持Ajax验证的表单插件
2016/03/24 Javascript
使用Xcache缓存器加速PHP网站的配置方法
2017/04/22 Javascript
Vue实现PopupWindow组件详解
2018/04/28 Javascript
vue中使用vue-cli接入融云实现即时通信
2019/04/19 Javascript
Vue CLI3创建项目部署到Tomcat 使用ngrok映射到外网
2019/05/16 Javascript
JavaScript中判断为整数的多种方式及保留两位小数的方法
2019/09/09 Javascript
如何基于JS截获动态代码
2019/12/25 Javascript
Ant Design Vue 添加区分中英文的长度校验功能
2020/01/21 Javascript
解决vue项目input输入框双向绑定数据不实时生效问题
2020/08/05 Javascript
如何利用JavaScript编写更好的条件语句详解
2020/08/10 Javascript
在项目vue中使用echarts的操作步骤
2020/09/07 Javascript
[01:43]深扒TI7聊天轮盘语音出处4
2017/05/11 DOTA
[03:01]完美世界DOTA2联赛PWL S2 集锦第二期
2020/12/03 DOTA
Python3读取UTF-8文件及统计文件行数的方法
2015/05/22 Python
wxPython中listbox用法实例详解
2015/06/01 Python
Python抓取手机号归属地信息示例代码
2016/11/28 Python
Django重置migrations文件的方法步骤
2019/05/01 Python
使用python实现离散时间傅里叶变换的方法
2019/09/02 Python
Python 输出详细的异常信息(traceback)方式
2020/04/08 Python
军校本科大学生自我评价
2014/01/14 职场文书
工作会议主持词
2014/03/17 职场文书
致百米运动员广播稿5篇
2014/10/13 职场文书
导游词范文
2015/02/13 职场文书
2016年秋季运动会通讯稿
2015/11/25 职场文书
预防职务犯罪警示教育心得体会
2016/01/15 职场文书
在 Golang 中实现 Cache::remember 方法详解
2021/03/30 Python
CocosCreator ScrollView优化系列之分帧加载
2021/04/14 Python
Idea连接MySQL数据库出现中文乱码的问题
2021/04/14 MySQL
tensorboard 可视化之localhost:6006不显示的解决方案
2021/05/22 Python
python for循环赋值问题
2021/06/03 Python
MySQL数据库之存储过程 procedure
2022/06/16 MySQL