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生成日历实例解析
Aug 21 Python
在Python中用has_key()方法查找键是否存在的教程
May 21 Python
Python的IDEL增加清屏功能实例
Jun 19 Python
Python MySQLdb 使用utf-8 编码插入中文数据问题
Mar 13 Python
python批量修改文件编码格式的方法
May 31 Python
浅谈Python的list中的选取范围
Nov 12 Python
python执行精确的小数计算方法
Jan 21 Python
pytorch 自定义卷积核进行卷积操作方式
Dec 30 Python
使用Keras预训练好的模型进行目标类别预测详解
Jun 27 Python
10款最佳Python开发工具推荐,每一款都是神器
Oct 15 Python
Python  Asyncio模块实现的生产消费者模型的方法
Mar 01 Python
Python OpenCV之常用滤波器使用详解
Apr 07 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+mysqli数据库连接的两种方式
2015/01/28 PHP
php+redis消息队列实现抢购功能
2018/02/08 PHP
[转]JS宝典学习笔记
2007/02/07 Javascript
学习ExtJS(一) 之基础前提
2009/10/07 Javascript
使用jQuery模板来展现json数据的代码
2010/10/22 Javascript
jquery+ajax每秒向后台发送请求数据然后返回页面的代码
2011/01/17 Javascript
getElementByIdx_x js自定义getElementById函数
2012/01/24 Javascript
jquery.messager.js插件导致页面抖动的解决方法
2013/07/14 Javascript
JS图片自动轮换效果实现思路附截图
2014/04/30 Javascript
JS实现仿QQ聊天窗口抖动特效
2015/05/10 Javascript
JavaScript中join()方法的使用简介
2015/06/09 Javascript
JavaScript实现图片轮播的方法
2015/07/31 Javascript
jQuery实现点击按钮弹出可关闭层的浮动层插件
2015/09/19 Javascript
原生JavaScript来实现对dom元素class的操作方法(推荐)
2017/08/16 Javascript
jQuery实现ajax的嵌套请求案例分析
2019/02/16 jQuery
深入理解Puppeteer的入门教程和实践
2019/03/05 Javascript
Openlayers实现图形绘制
2020/09/28 Javascript
python正常时间和unix时间戳相互转换的方法
2015/04/23 Python
浅析Python中元祖、列表和字典的区别
2016/08/17 Python
opencv改变imshow窗口大小,窗口位置的方法
2018/04/02 Python
Python基于百度云文字识别API
2018/12/13 Python
pyqt弹出新对话框,以及关闭对话框获取数据的实例
2019/06/18 Python
在django中实现页面倒数几秒后自动跳转的例子
2019/08/16 Python
css sprite简单实例
2016/05/23 HTML / CSS
Clarins娇韵诗英国官网:来自法国的天然护肤品牌
2017/04/18 全球购物
英国旅行箱包和行李箱购物网站:Travel Luggage & Cabin Bags
2019/08/26 全球购物
《翻越远方的大山》教学反思
2014/04/13 职场文书
银行行长竞聘演讲稿
2014/04/23 职场文书
我的中国梦演讲稿小学篇
2014/08/19 职场文书
乡镇务虚会发言材料
2014/10/20 职场文书
2014工程部年度工作总结
2014/12/17 职场文书
外贸业务员岗位职责
2015/02/13 职场文书
2016年秋季运动会通讯稿
2015/11/25 职场文书
Pytest中conftest.py的用法
2021/06/27 Python
javascript数组includes、reduce的基本使用
2021/07/02 Javascript
十大最强电系宝可梦,阿尔宙斯电系之一,第七被称为雷神
2022/03/18 日漫