

if not __name__ == '__main__':
	quit()

import wx
SSTYLE = wx.EXPAND | wx.ALL


def OnButtonOfFrameA(event):
	obj = event.GetEventObject()
	name = (None if not hasattr(obj,'GetName') else obj.GetName())
	print('OnButtonOfFrameA({})'.format(name))
	event.Skip()


def OnButton(event):

	'''An event handler for wx.EVT_BUTTON; a callback.
	Acts as a window manager. In this example we bind
	to the wx.App object to the wx.EVT_BUTTON event.
	'''

	#event.Skip() # pass to parent widget or wx.App
	obj = event.GetEventObject()
	name = (None if not hasattr(obj,'GetName') else obj.GetName())
	print('OnButton({})'.format(name))

	if name == 'buttonExit':
		quit()
	elif name == 'buttonAB' or name == 'buttonCB':
		if frameB:
			frameB.SetFocus()
		else:
			obj.Disable()
	elif name == 'buttonBA' or name == 'buttonCA':
		if frameA:
			frameA.SetFocus()
		else:
			obj.Disable()
	elif name == 'buttonAC' or name == 'buttonBC':
		if frameC:
			frameC.SetFocus()
		else:
			obj.Disable()
	else:
		raise Exception("Developer Error: You missed implementing a button.")


# -------------
app = wx.App()

# -------------
frameA = wx.Frame(None, title='Frame A', name='FrameA', style=0)

buttonAB = wx.Button(frameA, label='Switch to B', name='buttonAB')
buttonAC = wx.Button(frameA, label='Switch to C', name='buttonAC')
buttonExit = wx.Button(frameA, label='Exit', name='buttonExit')

sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(buttonAB, 1, SSTYLE, 0)
sizer.Add(buttonAC, 1, SSTYLE, 0)
sizer.Add(buttonExit, 1, SSTYLE, 0)
frameA.SetSizer(sizer)
frameA.Layout()
frameA.Show()
frameA.Bind(wx.EVT_BUTTON, OnButton)
frameA.Bind(wx.EVT_BUTTON, OnButtonOfFrameA, buttonAB)
frameA.Bind(wx.EVT_BUTTON, OnButtonOfFrameA, buttonAC)


# -------------
frameB = wx.Frame(frameA, title='Frame B', name='FrameB',
		pos=frameA.GetPosition(), size=frameA.GetSize(),
		style=0 )

buttonBA = wx.Button(frameB, label='Switch to A', name='buttonBA')
buttonBC = wx.Button(frameB, label='Switch to C', name='buttonBC')

sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(buttonBA, 1, SSTYLE, 0)
sizer.Add(buttonBC, 1, SSTYLE, 0)
frameB.SetSizer(sizer)
frameB.Layout()
frameB.Show()
frameB.Bind(wx.EVT_BUTTON, OnButton)

# -------------
frameC = wx.Frame(frameA, title='Frame C', name='FrameC',
	pos=frameA.GetPosition(), size=frameA.GetSize(),
	style=0)
buttonCA = wx.Button(frameC, label='Switch to A', name='buttonCA')
buttonCB = wx.Button(frameC, label='Switch to B', name='buttonCB')

sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(buttonCA, 1, SSTYLE, 0)
sizer.Add(buttonCB, 1, SSTYLE, 0)
frameC.SetSizer(sizer)
frameC.Show()

# --------------
frameA.Raise()
frameA.SetFocus()

app.MainLoop()

