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读取word文档的方法
May 09 Python
Python简单检测文本类型的2种方法【基于文件头及cchardet库】
Sep 18 Python
python 读写中文json的实例详解
Oct 29 Python
python 实现数组list 添加、修改、删除的方法
Apr 04 Python
pyqt5 使用cv2 显示图片,摄像头的实例
Jun 27 Python
Python中请不要再用re.compile了
Jun 30 Python
详解将Pandas中的DataFrame类型转换成Numpy中array类型的三种方法
Jul 06 Python
python实现函数极小值
Jul 10 Python
Python将视频或者动态图gif逐帧保存为图片的方法
Sep 10 Python
Django继承自带user表并重写的例子
Nov 18 Python
Python sys模块常用方法解析
Feb 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&&mysql)三
2006/10/09 PHP
PHP使用array_multisort对多个数组或多维数组进行排序
2014/12/16 PHP
php实现购物车产品删除功能(2)
2020/07/23 PHP
php封装db类连接sqlite3数据库的方法实例
2017/12/19 PHP
再谈IE中Flash控件的自动激活 ObjectWrap
2007/03/09 Javascript
js验证电话号码与手机支持+86的正则表达式
2014/01/23 Javascript
jQuery实现锚点scoll效果实例分析
2015/03/10 Javascript
举例简介AngularJS的内部语言环境
2015/06/17 Javascript
JS基于VML技术实现的五角星礼花效果代码
2015/10/26 Javascript
在vue中获取dom元素内容的方法
2017/07/10 Javascript
实例分析vue循环列表动态数据的处理方法
2018/09/28 Javascript
抖音上用记事本编写爱心小程序教程
2019/04/17 Javascript
vue项目中实现缓存的最佳方案详解
2019/07/11 Javascript
Vue Object 的变化侦测实现代码
2020/04/15 Javascript
Vue+Element UI 树形控件整合下拉功能菜单(tree + dropdown +input)
2020/08/28 Javascript
Python和Ruby中each循环引用变量问题(一个隐秘BUG?)
2014/06/04 Python
python实现的简单窗口倒计时界面实例
2015/05/05 Python
Python文件右键找不到IDLE打开项解决办法
2015/06/08 Python
Python解析最简单的验证码
2016/01/07 Python
利用python获取某年中每个月的第一天和最后一天
2016/12/15 Python
python实现屏保计时器的示例代码
2018/08/08 Python
Python3标准库总结
2019/02/19 Python
PyQt打开保存对话框的方法和使用详解
2019/02/27 Python
初次部署django+gunicorn+nginx的方法步骤
2019/09/11 Python
Python(PyS60)实现简单语音整点报时
2019/11/18 Python
利用HTML5中的Canvas绘制一张笑脸的教程
2015/05/07 HTML / CSS
资深地理教师自我评价
2013/09/21 职场文书
学生鉴定评语大全
2014/05/05 职场文书
感恩的演讲稿
2014/05/06 职场文书
机电系毕业生求职信
2014/07/11 职场文书
2014年酒店工作总结范文
2014/11/17 职场文书
2015年五一劳动节活动总结
2015/02/09 职场文书
推广普通话主题班会
2015/08/17 职场文书
蔬果开业典礼发言稿应该怎么写?
2019/09/03 职场文书
68行Python代码实现带难度升级的贪吃蛇
2022/01/18 Python
我的收音机情缘
2022/04/05 无线电