phoenix_title wx.lib.agw.shapedbutton

SButton tries to fill the lack of “custom shaped” controls in wxPython and it can be used to build round or elliptic-shaped buttons.


ShapedButton tries to fill the lack of “custom shaped” controls in wxPython (that depends on the same lack in wxWidgets). It can be used to build round buttons or elliptic buttons.

I have stolen some code from lib.buttons in order to recreate the same classes (GenButton, GenBitmapButton, GenBitmapTextButton, GenToggleButton, GenBitmapToggleButton, GenBitmapTextToggleButton). Here you have the same classes (with “Gen” replaced by “S”), with the same event handling, but they are rounded/elliptical buttons.

ShapedButton is based on a wx.Window, in which 2 images are drawn depending on the button state (pressed or not pressed). The 2 images have been stolen from Audacity (written with wxWidgets) and rearranged/reshaped/restyled using adobe PhotoShop. Changing the button colour in runtime was more difficult, but using some intelligent instruction from the PIL library it can be done.

ShapedButton reacts on mouse events only if the mouse event occurred inside the circle/ellipse, even if ShapedButton is built on a rectangular window. This behavior is a lot different with respect to Audacity round buttons.


Usage example:

import wx
import wx.lib.agw.shapedbutton as SB

class MyFrame(wx.Frame):

    def __init__(self, parent):

        wx.Frame.__init__(self, parent, -1, "ShapedButton Demo")

        panel = wx.Panel(self)

        # Create 2 bitmaps for the button
        upbmp = wx.Bitmap("play.png", wx.BITMAP_TYPE_PNG)
        disbmp = wx.Bitmap("playdisabled.png", wx.BITMAP_TYPE_PNG)

        play = SB.SBitmapToggleButton(panel, -1, upbmp, (100, 50))

# our normal wxApp-derived class, as usual

app = wx.App(0)

frame = MyFrame(None)


The ShapedButton construction and usage is quite similar to the lib.buttons implementation.

Methods and Settings

With ShapedButton you can:

  • Create rounded/elliptical buttons/togglebuttons;

  • Set images for the enabled/disabled/focused/selected state of the button;

  • Draw the focus indicator (or disable it);

  • Set label colour and font;

  • Apply a rotation to the ShapedButton label;

  • Change ShapedButton shape and text orientation in runtime.


ShapedButton requires PIL (Python Imaging Library) library to be installed, which can be downloaded from .

Window Styles

No particular window styles are available for this class.

Events Processing

This class processes the following events:

Event Name



Process a wxEVT_COMMAND_BUTTON_CLICKED event, when the button is clicked.

License And Version

ShapedButton is distributed under the wxPython license.

Latest revision: Andrea Gavana @ 16 Jul 2012, 15.00 GMT

Version 0.5

function_summary Functions Summary


Convert paths to the platform-specific separator.

class_summary Classes Summary


A mixin that allows to transform any of SButton, SBitmapButton and


Subclass of SButton which displays a bitmap, acting like a


Subclass of SButton which displays a bitmap and a label.


A ShapedButton toggle bitmap button with a text label.


A ShapedButton toggle bitmap button.


This is the main implementation of ShapedButton.


Event sent from the generic buttons when the button is activated.


A ShapedButton toggle button.



Convert paths to the platform-specific separator.


path – the path to convert.