By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
444,089 Members | 2,418 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 444,089 IT Pros & Developers. It's quick & easy.

wxPython - FlatNotebook help

P: 5
Hi, I'm having some problems with FlatNotebook.py and i hope you can help me. I'm sure that is very easy for an experinced user but i can't figured it out, i just start using wxpython.
The problem is that i don't know how to put diferent king of widgets on every notebook page. For example when i select page1, I want ot see three checkboxes and one button and when i select page2 two buttons and ten radio buttons, all in different positions than the previous page. Considering I have the following sample code how can i do that:
#code
Expand|Select|Wrap|Line Numbers
  1. import wx
  2. import FlatNotebook as FNB
  3. import random
  4.  
  5. class MenuEventFrame(wx.Frame):
  6.  
  7.     def __init__(self, parent, id):
  8.         wx.Frame.__init__(self, parent, id, 'Menus', size=(450, 200), pos=(500,400))
  9.         self.panel=wx.Panel (self, -1)
  10.         #self.panel.SetBackgroundColour ("white")
  11.         menuBar = wx.MenuBar()
  12.         menu1 = wx.Menu()
  13.         menuItem = menu1.Append(-1, "&Exit...")
  14.         menuBar.Append(menu1, "&File")
  15.         self.SetMenuBar(menuBar)
  16.  
  17.         dd="Page1"
  18.         dd1="Page2"
  19.         dd2="Page3"
  20.  
  21.         caption = "test"
  22.  
  23.         stil = FNB.FNB_VC8 | FNB.FNB_DROPDOWN_TABS_LIST | FNB.FNB_TABS_BORDER_SIMPLE | FNB.FNB_BACKGROUND_GRADIENT
  24.         self.book = FNB.FlatNotebook(self, wx.ID_ANY,  style=stil)
  25.         self.book.SetTabAreaColour(wx.Color(0,153,204))
  26.         self.book.AddPage(self.panel, dd, True, -1)
  27.         self.book.AddPage(self.panel, dd1, True, -1)
  28.         self.book.AddPage(self.panel, dd2, True, -1)
  29.         self.book.SetSelection(1)
  30.  
  31.  
  32.  
  33.     def CreatePage(self, caption):
  34.         p = wx.Panel(self.book)
  35.         wx.StaticText(p, -1, caption, (20,20))
  36.         wx.TextCtrl(p, -1, "", (20,40), (150,-1))
  37.         p.SetBackgroundColour(wx.SystemSettings_GetColour(wx.SYS_COLOUR_BTNFACE))
  38.         return p
  39.  
  40.  
  41. if __name__ == '__main__':
  42.     app = wx.PySimpleApp()
  43.     frame = MenuEventFrame(parent=None, id=-1)
  44.     frame.Show()
  45.     app.MainLoop()
  46.  
#end code

In conclusion i want to show different widgets on different notebook pages and of course bind an event to every widget.
Thank you.
May 3 '07 #1
Share this Question
Share on Google+
4 Replies


bartonc
Expert 5K+
P: 6,596
Thanks for the post (and you came SO close to getting the [ CODE ] tags right - instructions are on the right hand side in REPLY GUIDELINES when you reply).

Instead of
Expand|Select|Wrap|Line Numbers
  1.         self.book.AddPage(self.panel, dd, True, -1)
  2.         self.book.AddPage(self.panel, dd1, True, -1)
  3.         self.book.AddPage(self.panel, dd2, True, -1)
  4.  
You need to create more than on panel (with the widgets that you want on each page and then:
Expand|Select|Wrap|Line Numbers
  1.         self.book.AddPage(self.panel1, dd, True, -1)
  2.         self.book.AddPage(self.panel2, dd1, True, -1)
  3.         self.book.AddPage(self.panel3, dd2, True, -1)
  4.  
Hope that helps!
May 3 '07 #2

P: 5
MrQ
Hope that helps!
Yes, it helps, thank you very much, but now i'm having a more complex problem, I hope you can help me.
Basically what i want to do is to add a splitter window inside an flat notebook page, then inside the splitter window, on left panel add a label notebook. the problem is neither splitter window nor labelbook is created.
Here is sample code but it's obviously wrong because it's not working. Flatnotebook is created with all 4 pages but not the other ones. :
Expand|Select|Wrap|Line Numbers
  1. import wx
  2. import FlatNotebook as FNB
  3. import random
  4. import data
  5. import LabelBook as LB
  6. from Resources import *
  7.  
  8.  
  9. _pageTexts = ["Hello", "From", "wxPython", "LabelBook", "Demo"]
  10. _pageIcons = ["roll.png", "charge.png", "add.png", "decrypted.png", "news.png"]
  11. _pageColours = [wx.RED, wx.GREEN, wx.WHITE, wx.BLUE, "Pink"]
  12.  
  13. class Panel(wx.Panel):
  14.  
  15.     def __init__(self, parent, colour, label):
  16.  
  17.         wx.Panel.__init__(self, parent, style=wx.BORDER_SUNKEN)
  18.         self.SetBackgroundColour(colour)
  19.  
  20.         label = label + "Demo"
  21.         static = wx.StaticText(self, -1, label, pos=(10, 10))     
  22.  
  23.  
  24. class MenuEventFrame(wx.Frame):
  25.  
  26.     def __init__(self, parent, id):
  27.         wx.Frame.__init__(self, parent, id, 'Demo', size=(640, 480), pos=(500,400))
  28.  
  29.         self.panel=wx.Panel (self, -1)
  30.         self.panel1=wx.Panel (self, -1)
  31.         self.panel2=wx.Panel (self, -1)
  32.         self.panel3=wx.Panel (self, -1)
  33.  
  34.  
  35.         #splitter window
  36.         self.splitter = wx.SplitterWindow(self.panel, -1, style=wx.SP_3D|wx.SP_BORDER|
  37.                                           wx.SP_LIVE_UPDATE|wx.SP_3DSASH)
  38.         sty = wx.BORDER_SUNKEN
  39.         p1 = wx.Window(self.splitter, style=sty)
  40.         p1.SetBackgroundColour("blue")
  41.         wx.StaticText(p1, -1, "Panel One", (5,5))
  42.         p2 = wx.Window(self.splitter, style=sty)
  43.         p2.SetBackgroundColour("sky blue")
  44.         wx.StaticText(p2, -1, "Panel Two", (5,5))
  45.         self.splitter.SetMinimumPaneSize(20)
  46.         self.splitter.SplitVertically(p1, p2, -100)
  47.         self.splitter.SetMinimumPaneSize(120)
  48.  
  49.  
  50.  
  51.         #menu bar
  52.         menuBar = wx.MenuBar()
  53.         menu1 = wx.Menu()
  54.         menuItem = menu1.Append(-1, "&Exit...")
  55.         menuBar.Append(menu1, "&File")
  56.         self.SetMenuBar(menuBar)
  57.         self.Bind(wx.EVT_MENU, self.OnCloseMe, menuItem)
  58.  
  59.  
  60.         #flat notebook
  61.         stil = FNB.FNB_VC8 | FNB.FNB_DROPDOWN_TABS_LIST | FNB.FNB_TABS_BORDER_SIMPLE | FNB.FNB_BACKGROUND_GRADIENT
  62.         self.book = FNB.FlatNotebook(self, wx.ID_ANY,pos=(100, 300),size=(100, 100),  style=stil)
  63.         self.book.SetTabAreaColour(wx.Color(0,153,204))
  64.         self.book.AddPage(self.panel, "Main Application", True, -1)
  65.         self.book.AddPage(self.panel1, "Configuration", True, -1)
  66.         self.book.AddPage(self.panel2, "Favorites", True, -1)
  67.         self.book.AddPage(self.panel3, "Favorites", True, -1)
  68.  
  69.  
  70.         self.book1 = LB.LabelBook(self.panel, -1, style=INB_GRADIENT_BACKGROUND)
  71.         for indx, txts in enumerate(_pageTexts):
  72.             label = "This is panel number %d"%(indx+1)
  73.             self.book.AddPage(Panel(self.book1, _pageColours[indx], label),
  74.                               txts, True, indx)
  75.  
  76.  
  77.     def OnCloseMe(self, event):
  78.         self.Close(True)
  79.  
  80.  
  81. if __name__ == '__main__':
  82.     app = wx.PySimpleApp()
  83.     frame = MenuEventFrame(parent=None, id=-1)
  84.     frame.Show()
  85.     app.MainLoop()
  86.  
  87.  
I will be very grateful if you can help me with this because i'm kinda lost.
May 6 '07 #3

bartonc
Expert 5K+
P: 6,596
I don't know enough about splitter windows to get all the properties set just right.
For that matter I never write the GUI part of my programs. Here is what I consider to be a well-factored wx.Frame definition might look like (as generated by Boa Constructor):
Expand|Select|Wrap|Line Numbers
  1. #Boa:Frame:Frame1
  2.  
  3. import wx
  4.  
  5. def create(parent):
  6.     return Frame1(parent)
  7.  
  8. [wxID_FRAME1, wxID_FRAME1BUTTON1, wxID_FRAME1NOTEBOOK1, wxID_FRAME1NOTEBOOK2, wxID_FRAME1PANEL1,
  9.  wxID_FRAME1SPLITTERWINDOW1, wxID_FRAME1STATICTEXT1,
  10. ] = [wx.NewId() for _init_ctrls in range(7)]
  11.  
  12. class Frame1(wx.Frame):
  13.     def _init_coll_boxSizer1_Items(self, parent):
  14.         # generated method, don't edit
  15.  
  16.         parent.AddWindow(self.panel1, 1, border=0, flag=wx.EXPAND)
  17.  
  18.     def _init_coll_boxSizer2_Items(self, parent):
  19.         # generated method, don't edit
  20.  
  21.         parent.AddWindow(self.notebook1, 1, border=0, flag=wx.EXPAND)
  22.  
  23.     def _init_coll_notebook2_Pages(self, parent):
  24.         # generated method, don't edit
  25.  
  26.         parent.AddPage(imageId=-1, page=self.staticText1, select=True, text='Pages0')
  27.  
  28.     def _init_coll_notebook1_Pages(self, parent):
  29.         # generated method, don't edit
  30.  
  31.         parent.AddPage(imageId=-1, page=self.splitterWindow1, select=True, text='Pages0')
  32.  
  33.     def _init_sizers(self):
  34.         # generated method, don't edit
  35.         self.boxSizer1 = wx.BoxSizer(orient=wx.VERTICAL)
  36.  
  37.         self.boxSizer2 = wx.BoxSizer(orient=wx.VERTICAL)
  38.  
  39.         self._init_coll_boxSizer1_Items(self.boxSizer1)
  40.         self._init_coll_boxSizer2_Items(self.boxSizer2)
  41.  
  42.         self.SetSizer(self.boxSizer1)
  43.         self.panel1.SetSizer(self.boxSizer2)
  44.  
  45.     def _init_ctrls(self, prnt):
  46.         # generated method, don't edit
  47.         wx.Frame.__init__(self, id=wxID_FRAME1, name='', parent=prnt, pos=wx.Point(304, 151),
  48.                 size=wx.Size(732, 517), style=wx.DEFAULT_FRAME_STYLE, title='Frame1')
  49.         self.SetClientSize(wx.Size(724, 490))
  50.  
  51.         self.panel1 = wx.Panel(id=wxID_FRAME1PANEL1, name='panel1', parent=self, pos=wx.Point(0, 0),
  52.                 size=wx.Size(724, 490), style=wx.TAB_TRAVERSAL)
  53.  
  54.         self.notebook1 = wx.Notebook(id=wxID_FRAME1NOTEBOOK1, name='notebook1', parent=self.panel1,
  55.                 pos=wx.Point(0, 0), size=wx.Size(724, 490), style=0)
  56.  
  57.         self.splitterWindow1 = wx.SplitterWindow(id=wxID_FRAME1SPLITTERWINDOW1,
  58.                 name='splitterWindow1', parent=self.notebook1, pos=wx.Point(0, 0), size=wx.Size(716,
  59.                 464), style=wx.SP_LIVE_UPDATE | wx.SP_3D)
  60.         self.splitterWindow1.SetNeedUpdating(True)
  61.  
  62.         self.notebook2 = wx.Notebook(id=wxID_FRAME1NOTEBOOK2, name='notebook2',
  63.                 parent=self.splitterWindow1, pos=wx.Point(0, 0), size=wx.Size(282, 464),
  64.                 style=wx.NB_LEFT)
  65.  
  66.         self.button1 = wx.Button(id=wxID_FRAME1BUTTON1, label='button1', name='button1',
  67.                 parent=self.splitterWindow1, pos=wx.Point(286, 0), size=wx.Size(430, 464), style=0)
  68.         self.splitterWindow1.SplitVertically(self.notebook2, self.button1, 200)
  69.  
  70.         self.staticText1 = wx.StaticText(id=wxID_FRAME1STATICTEXT1, label='staticText1',
  71.                 name='staticText1', parent=self.notebook2, pos=wx.Point(0, 0), size=wx.Size(254,
  72.                 456), style=0)
  73.  
  74.         self._init_coll_notebook1_Pages(self.notebook1)
  75.         self._init_coll_notebook2_Pages(self.notebook2)
  76.  
  77.         self._init_sizers()
  78.  
  79.     def __init__(self, parent):
  80.         self._init_ctrls(parent)
  81.  
  82. if __name__ == '__main__':
  83.     app = wx.PySimpleApp()
  84.     frame = create(parent=None)
  85.     frame.Show()
  86.     app.MainLoop()
  87.  
May 6 '07 #4

bartonc
Expert 5K+
P: 6,596
If you are interested in trying the latest version of Boa Constructor, there are instruction for getting if from the CVS on SourceForge here.
May 6 '07 #5

Post your reply

Sign in to post your reply or Sign up for a free account.