Introduction
This recipe shows how to program responsive buttons. Such buttons change, when the mouse pointer enters or leaves the area of the button widget. In this case a button widget changes it's background colour.
What Objects are Involved
wx.GenButton - a special kind of a Button, that enables some further modifications. wx.Button would work fine as well.
Process Overview
When you enter the area of the button widget with a mouse pointer, EVT_ENTER_WINDOW event is generated. Simirarly, EVT_LEAVE_WINDOW event is generated, when you leave the area of the widget. So all you have to do is to bind those events to functions, that will change the colour/shape of the button widget appropriately.
Code Sample
# interactivebutton.py
import wx
from wx.lib.buttons import GenButton
class MyFrame(wx.Panel):
def __init__(self, parent, ID):
wx.Panel.__init__(self, parent, ID, wx.DefaultPosition)
self.btn = GenButton(self, -1, "button", pos = wx.Point(125,100), size=(-1, -1))
self.btn.SetBezelWidth(1)
self.btn.SetBackgroundColour( "DARKGREY")
wx.EVT_ENTER_WINDOW(self.btn, self.func)
wx.EVT_LEAVE_WINDOW(self.btn, self.func1)
def func(self, event):
self.btn.SetBackgroundColour( "GREY79")
self.btn.Refresh()
def func1(self, event):
self.btn.SetBackgroundColour( "DARKGREY")
self.btn.Refresh()
class MyApp(wx.App):
def OnInit(self):
frame = wx.Frame(None, -1, "interactivebutton.py", wx.DefaultPosition, wx.Size(350,300))
myframe = MyFrame(frame, -1)
frame.Centre()
frame.Show(True)
self.SetTopWindow(frame)
return True
app = MyApp(0)
app.MainLoop()
- - jan bodnar
