#!/usr/bin/env python

import wx

#------------------------------------------------------------------------------

class MouseEventFrame( wx.Frame ): 
    
    def __init__( self, parent ):
        
        self.frmID = wx.NewId()
        wx.Frame.__init__( self, parent, self.frmID, 'Frame With Button', size=( 300, 100 ) )
        
        self.pnlID = wx.NewId()
        self.panel = wx.Panel( self, self.pnlID )
        self.panel.Bind( wx.EVT_LEFT_DOWN, self.OnMouseDown )
        
        self.btnID = wx.NewId()
        self.button = wx.Button( self.panel, id=self.btnID, label='Over Button NOT', pos=( 100, 15 ) )
        
        self.Bind( wx.EVT_BUTTON, self.OnButtonClick, self.button )
        self.button.Bind( wx.EVT_LEFT_DOWN, self.OnMouseDown )
        
        self.button.Bind( wx.EVT_ENTER_WINDOW, self.OnEnterWindow )
        self.button.Bind( wx.EVT_LEAVE_WINDOW, self.OnLeaveWindow )
        
        self.btnCtr = 0
        self.IDs = [ self.frmID, self.pnlID, self.btnID ]
        
    #end __init__ def
    
    #------------------------
        
    def OnMouseDown( self, event ) :
        
        widgetID = event.GetId()
        print '\n----  OnMouseDown()   ',
        if widgetID in self.IDs :
            
            if   widgetID == self.frmID :
                print 'ID  Frame',
            elif widgetID == self.pnlID :
                print 'ID  Panel',
            elif widgetID == self.btnID :
                print 'ID  Button',
            #end if
            
        #end if
        print
        
        event.Skip() 
    #end def
        
    def OnButtonClick( self, event ): 
        
        print '\n----  OnButtonClick()'
        
        if   self.btnCtr == 0 :
            self.panel.SetBackgroundColour( 'Red' )
        
        elif self.btnCtr == 1 :
            self.panel.SetBackgroundColour( 'White' )
        
        elif self.btnCtr == 2 :
            self.panel.SetBackgroundColour( 'Blue' )
        #end if
        self.panel.Refresh()
        
        self.btnCtr = (self.btnCtr + 1) % 3
        
        event.Skip() 
        
    #endf OnButtonClick def
    
    #-----
        
    def OnEnterWindow( self, event ): 
        self.button.SetLabel( 'Over Button !' ) 
        event.Skip() 
        
    def OnLeaveWindow( self, event ): 
        self.button.SetLabel( 'Over Button NOT' ) 
        event.Skip() 

#end MouseEventFrame class 

#------------------------------------------------------------------------------

if __name__ == '__main__': 

    app = wx.App( redirect=False ) 
    frame = MouseEventFrame( parent=None ) 
    frame.Show() 
    app.MainLoop() 
