Chinaunix首页 | 论坛 | 博客
  • 博客访问: 8038
  • 博文数量: 4
  • 博客积分: 170
  • 博客等级: 入伍新兵
  • 技术积分: 50
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-14 09:37
文章分类
文章存档

2008年(4)

我的朋友
最近访客

分类: Python/Ruby

2008-05-16 23:57:06


今日女女给我买了个口琴,并千叮咛万嘱咐要我勤加苦练,好在他妈妈面前秀一手。多“体贴”的女朋友了。哎,女朋友的要求就是命令啊,一会儿还要去练习,所以赶快把今天的书读完吧。

      今天学习wxPython的事件驱动模型(event-driven)。wxPython中所有的事件都是wx.Event或其子类的实例罢了。这里需要区分下面两个概念:event binder是wxPython中的一个对象,它包含了一个特定控件(widget),事件类型,和响应函数的对应关系;wx.EventHandler是wxPython中的一个类,它允许她的实例实现事件,事件类型以及响应函数的绑带。

       在wxPython中,一个事件类可以包含不同的事件类型。每一个事件类型都有自己的 event binder。

     wxPython中任何可以响应事件的对象都是wx.EvtHandler的子类。所有的窗口对象(前面已经提到任何可见的部分实际上都可以被称作窗口对象)也是wx.EvtHandler的子类,因此所有的控件都可以响应事件。除此之外,一些非窗口对象,比如wx.App也可以响应事件。Bind()是wx.EvtHandler中的一个常用的方法。它的调用方式为:

Bind(event, handler, source=None, id1=wx.ID_ANY, id2=wx.ID_ANY)


     其中的source用来指出event的出处。因为可能事件的出处并不是帮定该事件的控件。比如下面的代码:


def __init__(self, parent, id):
    wx.Frame.__init__(self, parent, id, 'Frame With Button',
    size=(300, 100))
    panel = wx.Panel(self, -1)
    button = wx.Button(panel, -1, "Close", pos=(130, 15),
    size=(40, 40))
    self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
    self.Bind(wx.EVT_BUTTON, self.OnCloseMe, button)


    def OnCloseMe(self, event):
        self.Close(True)


    def OnCloseWindow(self, event):
        self.Destroy()


     这里的binder明显是Frame,只有wx.EVT_CLOSE是Frame本身触发的,而EVT_BUTTON却不是。这时候source参数就可以明确的告诉binder这个事实。


阅读(612) | 评论(0) | 转发(0) |
0

上一篇:强大的__builtin__

下一篇:没有了

给主人留下些什么吧!~~