You could do your event binding in the parent class as it has access to both panels
#! /usr/bin/python
# Trying to do things in a separate panel based on
# events that happen in another panel
import wx
# ----- Functions
# ----- Classes
class ChkbxPanel(wx.Panel):
# This class defines the panel that will
# contain the checkbox
def __init__(self, parent):
wx.Panel.__init__(self, parent=parent, id=-1)
# Widgets
choices = ['one', 'two', 'three']
prompt = 'Please Make a Choice'
self.chkBx = wx.CheckListBox(self, choices=choices, size=(-1, 200))
self.PromptChkBx = wx.StaticText(self, label=prompt)
# Page Sizers
self.panel_vertSizer = wx.BoxSizer(wx.VERTICAL)
self.panel_vertSizer.Add(self.PromptChkBx, proportion=0,
flag=wx.ALIGN_LEFT)
self.panel_vertSizer.Add(self.chkBx, proportion=0, flag=wx.ALIGN_LEFT)
# Invoke Sizer
self.SetSizer(self.panel_vertSizer)
# Make 'self' (the panel) shrink to the minimum size
# required by the controls
self.Fit()
# end __init__
# ----- Functions
class ResultsPanel(wx.Panel):
# This class define the panel that will
# contain the textctrl
def __init__ (self, parent):
wx.Panel.__init__(self, parent=parent, id=-1)
# Widgets
resultsPanelTitle = 'Results:'
self.resultsTitle = wx.StaticText(self, label=resultsPanelTitle)
self.results = wx.TextCtrl(self, size=(300, 500),
style=(wx.TE_MULTILINE | wx.TE_READONLY | wx.TE_DONTWRAP))
self.CheckedBxs = ()
lenofcb = len(self.CheckedBxs)
typeofcb = type(self.CheckedBxs)
self.results.AppendText('How Many Boxes are Checkd:\n')
self.results.AppendText(str(lenofcb) + '\n')
self.results.AppendText(str(typeofcb) + '\n')
# Page Sizer
self.panel_vertSizer = wx.BoxSizer(wx.VERTICAL)
self.panel_vertSizer.Add(self.resultsTitle, proportion=0, flag=wx.ALIGN_LEFT)
self.panel_vertSizer.Add(self.results, proportion=0, flag=wx.ALIGN_LEFT)
# Invoke Sizer
self.SetSizer(self.panel_vertSizer)
# Make 'self' (the panel) shrink to the minimum size
# required by the controls
self.Fit()
# end __init__
# ----- Functions
# ----- Main Frame
class MainFrame(wx.Frame):
# A 2-Control Class With BoxSizers
def __init__(self):
# Configure the Figure
titleText = 'Wx Question'
wx.Frame.__init__(self, None, title=titleText
, size=(600, 300), style=wx.DEFAULT_FRAME_STYLE)
# First Frame Control automatically expands to the
# Frame's client size
frame_panel = wx.Panel(self)
# Create the Controls
leftPanel = ChkbxPanel(frame_panel)
self.rightPanel = ResultsPanel(frame_panel)
# Create Sizers and add the controls
panelCtrls_horzSizer = wx.BoxSizer(wx.HORIZONTAL)
panelCtrls_horzSizer.Add(leftPanel)
panelCtrls_horzSizer.Add(self.rightPanel)
framePanel_vertSizer = wx.BoxSizer(wx.VERTICAL)
framePanel_vertSizer.Add(panelCtrls_horzSizer)
frame_panel.SetSizer(framePanel_vertSizer)
frame_panel.Fit()
self.SetSize((600, 600))
leftPanel.chkBx.Bind(wx.EVT_CHECKLISTBOX, self.onCheckBox)
def onCheckBox(self, event):
checked = event.EventObject.CheckedStrings
self.rightPanel.results.AppendText(
'Checked: {0}, Qty checked: {1}\n'.format(checked, len(checked)))
# Main if statement
if __name__ == '__main__':
app = wx.App(redirect=False)
appFrame = MainFrame().Show()
app.MainLoop()