I have but one frame. I have several panels built into the frame. They are all hidden but one. A "Next" button performs .Hide() on that panel and then calls a function called .ShowYourself. I wanted something Wizard-Like, which you can see in a previous question
I am attempting to put a sizer on the panel. As you can see from the , I cannot get the sizer to take up the whole of the panel. The picture isn't showing on preview, so here it is at http://tinypic.com/r/14nh651/5.
import wx
import sys
class MyApp(
wx.App # This makes a subclass of the wx.App class
):
def OnInit(self):
# image = wx.Image('wxPython.jpg', wx.BITMAP_TYPE_JPEG)
self.frame = MyFrame(None)
self.frame.Show()
self.SetTopWindow(self.frame)
return True
def OnExit(self):
print 'Dying ...'
####################################################################################################
class MyFrame(
wx.Frame # This makes a subclass of the wx.Frame class
):
"""Frame class that displays an image."""
def __init__(self,
image,
parent=None, # "None" as a parameter means this is a top-level window
id=-1, # "-1" means automatically generate a new ID
title='Generic Title', # What words appear in the title bar?
pos=wx.DefaultPosition, # Where is the upper left-hand corner?
style=wx.CAPTION | wx.STAY_ON_TOP # Style with only a caption
):
"""Create a wx.Frame instance and display image."""
size = (500, 500)
wx.Frame.__init__(self, parent, id, 'Program Title', pos, size, style)
sizer_h = wx.BoxSizer(wx.HORIZONTAL)
self.panelX = TestLayout3(self)
sizer_h.Add(self.panelX)
self.SetSizer(sizer_h)
self.panelX.ShowYourself()
def ShutDown(self):
self.Destroy()
####################################################################################################
class TestLayout3(wx.Panel):
# 0 - Splash screen with "Next" and "Cancel and Exit" buttons
def __init__(self, parent, id=-1):
size = (600, 600)
wx.Panel.__init__(self, parent, id, size)
a, b, c, d, e, f, g = [wx.Button(self, -1, 4*c) for c in 'ABCDEFG']
a.SetMaxSize((200,100)) # 'a' won't get bigger than 200 wide
# build the top row (with sizers I usually work from inside to out)
hs0 = wx.BoxSizer(wx.HORIZONTAL)
hs0.Add(a, 1, wx.ALIGN_LEFT) # 1 here means expand with weight 1
hs0.Add((0,0), 1) # also expand the spacing
hs0.Add(b, 0, wx.ALIGN_RIGHT) # 0 means don't expand this
# build the bottom row
hs2 = wx.BoxSizer(wx.HORIZONTAL)
hs2.Add(d, 0, wx.ALIGN_LEFT)
hs2.Add((10,10), 0)
hs2.Add(e, 0)
hs2.Add((10,10), 0)
hs2.Add(f, 0)
hs2.Add((10, 10), 1)
hs2.Add(g, 0, wx.ALIGN_RIGHT)
# stack the rows vertically
vs = wx.BoxSizer(wx.VERTICAL)
vs.Add(hs0, flag=wx.EXPAND) # expand in the orthogonal direction to sizer (here horizontal)
vs.Add(c, 1, flag=wx.EXPAND)
vs.Add(hs2, flag=wx.EXPAND)
self.SetSizer(vs)
self.Raise()
self.SetPosition((0,0))
self.Fit()
self.Hide()
# reveal this panel
def ShowYourself(self):
self.Raise()
self.SetPosition((0,0))
self.Fit()
self.Show()
# what do we do when the "Back" button is clicked?
def OnBack(self, event):
self.Hide()
self.GetParent().panel1.ShowYourself()
# what do we do when the "Next" button is clicked?
def OnNext(self, event):
self.Hide()
self.GetParent().panel1.ShowYourself()
![# what do we do when the "Cancel and Exit" button is clicked?
def OnCancelAndExit(self, event):
self.GetParent().ShutDown()
####################################################################################################
def main():
app = MyApp(redirect = False)
app.MainLoop()
####################################################################################################
if __name__ == '__main__':
main()][3]