wxPython中的Skip()方法

在学习《wxPython in action》一书的过程中,一直对于event.Skip()方法存有疑惑,今天重新研究了这个问题,总结如下: 
 
一个使用Skip方法的例子:
#!/usr/bin/env python

import wx

class MouseEventFrame(wx.Frame):
    def __init__(self, parent, id):
        wx.Frame.__init__(self, parent, id, 'Button', size=(300,100))
        self.panel=wx.Panel(self)
        self.panel.SetBackgroundColour('White')
        self.button=wx.Button(self.panel, label="Not Over", pos=(100,15))
        self.button.Bind(wx.EVT_ENTER_WINDOW, self.OnEnterWindow)
        self.button.Bind(wx.EVT_ENTER_WINDOW, self.OnEnterWindow2)
        self.button.Bind(wx.EVT_LEAVE_WINDOW, self.OnLeaveWindow)

    def OnEnterWindow(self, event):
        self.button.SetLabel('Over Me')

    def OnEnterWindow2(self, event):
        self.panel.SetBackgroundColour('Red')
        self.panel.Refresh()
        # event.Skip()
        
    def OnLeaveWindow(self, event):
        self.button.SetLabel('Not Over')
        self.panel.SetBackgroundColour('White')
        self.panel.Refresh() 
       

if __name__=='__main__':
    app=wx.PySimpleApp()
    frame=MouseEventFrame(parent=None, id=-1)
    frame.Show()
    app.MainLoop()
这段代码中在一个button上绑定了三个事件,其中有两个进入窗口(按钮)的事件。运行会发现当光标移动到按钮之上时,面板颜色变红,而按钮上的文字并未发生改变。也就是说对于同一组件上同一类型的事件,wxPython只处理了其中的一个。这时候就轮到我们的Skip方法出场了,取消OnEnterWindow2()方法中注释掉的Skip方法,运行后将会看到光标移动到按钮之上,两个处理过程都被触发了。

因此,在wxPython中,如果一个动作会触发多个事件,那么应该使用Skip方法来保证每个都被处理到。经过测试,我发现后绑定的事件会被先处理,所以以上的代码只在OnEnterWindow2()中调用了Skip方法。其实为了保证不遗漏,在每个事件处理的方法中都调用Skip方法应该是一种良好的习惯。

转载于:https://my.oschina.net/jerryone/blog/70321

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值