A custom panel class with gradient background shading with the possibility to add buttons and controls still respecting the gradient background.
With ButtonPanel
class you have a panel with gradient colouring
on it and with the possibility to place some buttons on it. Using a
standard panel with normal Button
leads to an ugly result: the
buttons are placed correctly on the panel - but with grey area around
them. Gradient colouring is kept behind the images - this was achieved
due to the PNG format and the transparency of the bitmaps.
The image are functioning like a buttons and can be caught in your code using the usual:
self.Bind(wx.EVT_BUTTON, self.OnButton)
method.
The control is generic, and support theming (well, I tested it under Windows with the three default themes: grey, blue, silver and the classic look).
ButtonPanel
supports 4 alignments: left, right, top, bottom, which have a
different meaning and behavior with respect to ToolBar
. The easiest
thing is to try the demo to understand, but I’ll try to explain how it works.
CASE 1: ButtonPanel
has a main caption text.
Left alignment means ButtonPanel
is horizontal, with the text aligned to the
left. When you shrink the demo frame, if there is not enough room for all
the controls to be shown, the controls closest to the text are hidden;
Right alignment means ButtonPanel
is horizontal, with the text aligned to the
right. Item layout as above;
Top alignment means ButtonPanel
is vertical, with the text aligned to the top.
Item layout as above;
Bottom alignment means ButtonPanel
is vertical, with the text aligned to the
bottom. Item layout as above.
CASE 2: ButtonPanel
has no main caption text.
In this case, left and right alignment are the same (as top and bottom are the same),
but the layout strategy changes: now if there is not enough room for all the controls
to be shown, the last added items are hidden (“last” means on the far right for an
horizontal ButtonPanel
and far bottom for a vertical ButtonPanel
).
Usage example:
import wx
import wx.lib.agw.buttonpanel as BP
class MyFrame(wx.Frame):
def __init__(self, parent, id=-1, title="ButtonPanel", pos=wx.DefaultPosition,
size=(800, 600), style=wx.DEFAULT_FRAME_STYLE):
wx.Frame.__init__(self, parent, id, title, pos, size, style)
mainPanel = wx.Panel(self, -1)
self.logtext = wx.TextCtrl(mainPanel, -1, "", style=wx.TE_MULTILINE)
vSizer = wx.BoxSizer(wx.VERTICAL)
mainPanel.SetSizer(vSizer)
titleBar = BP.ButtonPanel(mainPanel, -1, "A Simple Test & Demo")
btn1 = BP.ButtonInfo(titleBar, wx.ID_ANY, wx.Bitmap("png4.png", wx.BITMAP_TYPE_PNG))
titleBar.AddButton(btn1)
self.Bind(wx.EVT_BUTTON, self.OnButton, btn1)
btn2 = BP.ButtonInfo(titleBar, wx.ID_ANY, wx.Bitmap("png3.png", wx.BITMAP_TYPE_PNG))
titleBar.AddButton(btn2)
self.Bind(wx.EVT_BUTTON, self.OnButton, btn2)
btn3 = BP.ButtonInfo(titleBar, wx.ID_ANY, wx.Bitmap("png2.png", wx.BITMAP_TYPE_PNG))
titleBar.AddButton(btn3)
self.Bind(wx.EVT_BUTTON, self.OnButton, btn3)
btn4 = BP.ButtonInfo(titleBar, wx.ID_ANY, wx.Bitmap("png1.png", wx.BITMAP_TYPE_PNG))
titleBar.AddButton(btn4)
self.Bind(wx.EVT_BUTTON, self.OnButton, btn4)
vSizer.Add(titleBar, 0, wx.EXPAND)
vSizer.Add((20, 20))
vSizer.Add(self.logtext, 1, wx.EXPAND | wx.ALL, 5)
titleBar.DoLayout()
vSizer.Layout()
def OnButton(self, event):
''' Handler for the ``wx.EVT_BUTTON`` event. '''
obj = event.GetEventObject()
# This will print the button label
print(obj.GetText())
# our normal wxApp-derived class, as usual
app = wx.App(0)
frame = MyFrame(None)
app.SetTopWindow(frame)
frame.Show()
app.MainLoop()
This class supports the following window styles:
Window Styles |
Hex Value |
Description |
---|---|---|
|
0x1 |
|
|
0x2 |
|
This class processes the following events:
Event Name |
Description |
---|---|
|
Process a wxEVT_COMMAND_BUTTON_CLICKED event, when a button is clicked. |
ButtonPanel
is distributed under the wxPython license.
Latest Revision: Andrea Gavana @ 27 Dec 2012, 21.00 GMT
Version 0.7.
Brighten the input colour by a factor. |
|
Creates a disabled-looking bitmap starting from the input one. |
Pseudo-class that imitates |
|
|
|
This class holds information about every button that is added to |
|
A custom panel class with gradient background shading with the possibility to |
|
This class is used to hold data about the main caption in |
|
This class represents a base class for all pseudo controls used in |
|
This class holds all the information to size and draw a separator inside |
|
This is a mix-in class to add pseudo support to |
|
Timer used for deleting |
BrightenColour
(colour, factor)¶Brighten the input colour by a factor.