This class can be used to have multiple buttons in a property editor.
You will need to create a new property editor class, override CreateControls, and have it return wx.propgrid.PGMultiButton instance in wx.propgrid.PGWindowList.SetSecondary
.
For instance, here we add three buttons to a TextCtrl editor:
class SampleMultiButtonEditor(wx.propgrid.PGTextCtrlEditor):
def GetName(self):
return "SampleMultiButtonEditor"
def CreateControls(self, propGrid, aProperty, pos, size):
# Create and populate buttons-subwindow
buttons = wx.propgrid.PGMultiButton(propGrid, size)
# Add two regular buttons
buttons.Add("...")
buttons.Add("A")
# Add a bitmap button
buttons.Add(wx.ArtProvider.GetBitmap(wx.ART_FOLDER))
# Create the 'primary' editor control (textctrl in self case)
wndList = wx.propgrid.PGTextCtrlEditor.CreateControls(
propGrid, aProperty, pos, buttons.GetPrimarySize())
# Finally, move buttons-subwindow to correct position and make sure
# returned wx.propgrid.PGWindowList contains our custom button list.
buttons.Finalize(propGrid, pos)
wndList.SetSecondary(buttons)
return wndList
def OnEvent(self, propGrid, aProperty, ctrl, event):
if event.GetEventType() == wx.wxEVT_BUTTON:
buttons = propGrid.GetEditorControlSecondary()
if event.GetId() == buttons.GetButtonId(0):
# Do something when the first button is pressed
# Return true if the action modified the value in editor.
...
if event.GetId() == buttons.GetButtonId(1):
# Do something when the second button is pressed
...
if event.GetId() == buttons.GetButtonId(2):
# Do something when the third button is pressed
...
return wx.propgrid.PGTextCtrlEditor.OnEvent(propGrid, aProperty, ctrl, event)
Further to use this editor, code like this can be used:
# Register editor class - needs only to be called once
multiButtonEditor = SampleMultiButtonEditor()
wx.propgrid.PropertyGrid.RegisterEditorClass(multiButtonEditor)
# Insert the property that will have multiple buttons
propGrid.Append(
wx.propgrid.LongStringProperty("MultipleButtons", wx.propgrid.PG_LABEL))
# Change property to use editor created in the previous code segment
propGrid.SetPropertyEditor("MultipleButtons", multiButtonEditor)
Constructor. |
|
Adds new button, with given label. |
|
A simple wrapper around the PGMultiButton.Add method, for backwards compatibility. |
|
A simple wrapper around the PGMultiButton.Add method, for backwards compatibility. |
|
Call this in CreateControls() of your custom editor class after all buttons have been added. |
|
Returns pointer to one of the buttons. |
|
Returns Id of one of the buttons. |
|
Returns number of buttons. |
|
Returns size of primary editor control, as appropriately reduced by number of buttons present. |
See |
|
See |
wx.propgrid.
PGMultiButton
(Window)¶Possible constructors:
PGMultiButton(pg, sz)
This class can be used to have multiple buttons in a property editor.
__init__
(self, pg, sz)¶Constructor.
pg (wx.propgrid.PropertyGrid) –
sz (wx.Size) –
Add
(self, *args, **kw)¶Add (self, label, id=-2)
Adds new button, with given label.
label (string) –
id (int) –
Add (self, bitmap, id=-2)
Adds new bitmap button.
bitmap (wx.BitmapBundle) –
id (int) –
AddBitmapButton
(self, bitmap, id=-2)¶A simple wrapper around the PGMultiButton.Add method, for backwards compatibility.
AddButton
(self, label, id=-2)¶A simple wrapper around the PGMultiButton.Add method, for backwards compatibility.
Finalize
(self, propGrid, pos)¶Call this in CreateControls() of your custom editor class after all buttons have been added.
propGrid (wx.propgrid.PropertyGrid) – wx.propgrid.PropertyGrid given in CreateControls().
GetButton
(self, i)¶Returns pointer to one of the buttons.
i (int) –
Window
GetButtonId
(self, i)¶Returns Id of one of the buttons.
This is utility function to be used in event handlers.
i (int) –
int
GetClassDefaultAttributes
(variant=WINDOW_VARIANT_NORMAL)¶variant (WindowVariant) –
VisualAttributes
GetCount
(self)¶Returns number of buttons.
int
GetPrimarySize
(self)¶Returns size of primary editor control, as appropriately reduced by number of buttons present.
Size
PrimarySize
¶See GetPrimarySize