wxpython初学者(五)之 Skip()

<span style="font-size:18px;">import wx
class MouseEventFrame(wx.Frame):
    def __init__(self,parent,id):
        wx.Frame.__init__(self,parent,id,'Button',size = (300,200))
        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.SetBackgroundColour('Blue')
        self.panel.Refresh()


if __name__ == '__main__':
    app = wx.PySimpleApp()
    frame= MouseEventFrame(parent=None,id=-1)
    frame.Show()
    app.MainLoop()</span>

 

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


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

 


 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值