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对字典进行排序实例
Sep 25 Python
python自动化测试之从命令行运行测试用例with verbosity
Sep 28 Python
探究Python多进程编程下线程之间变量的共享问题
May 05 Python
Python下的常用下载安装工具pip的安装方法
Nov 13 Python
python logging日志模块以及多进程日志详解
Apr 18 Python
在Mac下使用python实现简单的目录树展示方法
Nov 01 Python
python 获取url中的参数列表实例
Dec 18 Python
Django 开发环境配置过程详解
Jul 18 Python
Python容器使用的5个技巧和2个误区总结
Sep 26 Python
python实现获取单向链表倒数第k个结点的值示例
Oct 24 Python
keras中epoch,batch,loss,val_loss用法说明
Jul 02 Python
Django使用channels + websocket打造在线聊天室
May 20 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验证码类实例分享
2013/12/27 PHP
PHP实现对二维数组某个键排序的方法
2016/09/14 PHP
firefo xml 读写实现js代码
2009/06/11 Javascript
jQuery插件实现表格隔行换色且感应鼠标高亮行变色
2013/09/22 Javascript
Nodejs极简入门教程(二):定时器
2014/10/25 NodeJs
javascript表单验证和Window详解
2014/12/11 Javascript
jfreechart插件将数据展示成饼状图、柱状图和折线图
2015/04/13 Javascript
一不小心就做错的JS闭包面试题
2015/11/25 Javascript
JS for...in 遍历语句用法实例分析
2016/08/24 Javascript
AngularJS表格样式简单设置方法示例
2017/03/03 Javascript
微信小程序 获取二维码实例详解
2017/06/23 Javascript
解决jquery appaend元素中id绑定事件失效的问题
2017/09/12 jQuery
Angular异步变同步处理方法
2018/08/13 Javascript
Vue程序调试的方法
2019/06/17 Javascript
微信小程序单选框自定义赋值
2020/05/26 Javascript
python求pi的方法
2014/10/08 Python
python分析nignx访问日志脚本分享
2015/02/26 Python
Python微信企业号开发之回调模式接收微信端客户端发送消息及被动返回消息示例
2017/08/21 Python
Python实现的破解字符串找茬游戏算法示例
2017/09/25 Python
PyQt5每天必学之工具提示功能
2018/04/19 Python
解决nohup重定向python输出到文件不成功的问题
2018/05/11 Python
基于python实现名片管理系统
2018/11/30 Python
Python3爬虫全国地址信息
2019/01/05 Python
python+selenium实现简历自动刷新的示例代码
2019/05/20 Python
详解Django定时任务模块设计与实践
2019/07/24 Python
Python线程指南分享
2019/11/19 Python
详解Flask前后端分离项目案例
2020/07/24 Python
英国性能汽车零件和发动机配件在线:Maxpeedingrods
2019/11/05 全球购物
教师现实表现材料
2014/02/14 职场文书
促销活动方案模板
2014/02/24 职场文书
品质口号大全
2014/06/17 职场文书
小学安全教育月活动总结
2014/07/07 职场文书
小学生安全保证书
2015/05/09 职场文书
教师节校长致辞
2015/07/31 职场文书
CSS 新特性 contain控制页面的重绘与重排问题
2021/04/30 HTML / CSS
Unity连接MySQL并读取表格数据的实现代码
2021/06/20 MySQL