Source

wxPython / misc / notebooktest.py


import wx


class TestNotebook(wx.Notebook):
    def __init__(self, parent, ID=-1):
        wx.Notebook.__init__(self, parent, ID)

        # page 1
        # just a panel with a small fixed size
        p = wx.Panel(self, size=(50,50))
        self.AddPage(p, "page 1")

        # page 2
        # a medium sized panel with manually layed out controls
        p = wx.Panel(self)
        b = wx.Button(p, -1, "a button", (20,20))
        b = wx.Button(p, -1, "another button", (80,80))
        b = wx.Button(p, -1, "and yet another button", (140,140))
        b.Bind(wx.EVT_BUTTON, self.ShowBestSizes)
        self.AddPage(p, "page 2")

        # page 3
        # a larger panel with lots of controls in a sizer.
        text = "one two buckle my shoe three four shut the door "\
               "five six pick up sticks seven eight lay them straight "\
               "nine ten big fat hen"
        p = wx.Panel(self)
        fgs = wx.FlexGridSizer(cols=4, vgap=5, hgap=5)
        for word in text.split():
            label = wx.StaticText(p, -1, word+":")
            tc = wx.TextCtrl(p, -1, "", size=(120,-1))
            fgs.Add(label, flag=wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL | wx.LEFT, border=10)
            fgs.Add(tc, flag=wx.RIGHT, border=10)
        box = wx.BoxSizer()
        box.Add(fgs, 1, wx.EXPAND|wx.ALL, 10)
        p.SetSizer(box)
        self.AddPage(p, "page 3")


    # show the best size of each page
    def ShowBestSizes(self, evt):
        for num in range(self.GetPageCount()):
            page = self.GetPage(num)
            print page.GetBestSize()
            

if __name__ == '__main__':
    app = wx.PySimpleApp()
    f = wx.Frame(None, -1, "Notebook Test")
    nb = TestNotebook(f)
    s = wx.BoxSizer()
    s.Add(nb)           # notebook is added directly to the sizer
    f.SetSizer(s)
    s.Fit(f)            # sizer calculates layout to set frame size
    f.Show()
    app.MainLoop()