views:

295

answers:

2

Why do 'GetSelection()' return the index to the first page and not the last created in 'init' and 'new_panel'? It do return correct index in the 'click' method.

The output should be 0 0 1 1 2 2, but mine is 0 0 0 0 0 0.

Running latest version of python and wxpython in ArchLinux.

Ørjan Pettersen

#!/usr/bin/python

#12_aui_notebook1.py

import wx
import wx.lib.inspection

class MyFrame(wx.Frame):
    def __init__(self, *args, **kwds):
     wx.Frame.__init__(self, *args, **kwds)

     self.nb = wx.aui.AuiNotebook(self)

     self.new_panel('Page 1')
     print self.nb.GetSelection()
     self.new_panel('Page 2')
     print self.nb.GetSelection()
     self.new_panel('Page 3')
     print self.nb.GetSelection()

    def new_panel(self, nm):
     pnl = wx.Panel(self)
     pnl.identifierTag = nm
     self.nb.AddPage(pnl, nm)
     self.sizer = wx.BoxSizer()
     self.sizer.Add(self.nb, 1, wx.EXPAND)
     self.SetSizer(self.sizer)
     pnl.SetFocus() # Have focused the last panel.
     print self.nb.GetSelection()

     pnl.Bind(wx.EVT_LEFT_DOWN, self.click)

    def click(self, event):
     print 'Mouse click'
     print self.nb.GetSelection()
     print self.nb.GetPageText(self.nb.GetSelection())

class MyApp(wx.App):
    def OnInit(self):
     frame = MyFrame(None, -1, '12_aui_notebook1.py')
     frame.Show()
     self.SetTopWindow(frame)
     return 1

if __name__ == "__main__":
    app = MyApp(0)
#    wx.lib.inspection.InspectionTool().Show()
    app.MainLoop()
A: 

I ran your example and got the correct output:

0
0
1
1
2
2

I'm using the latest windows release of wxPython

Toni Ruža
That is strange, I'm getting 0 0 0 0 0 0. Running it on a linux platform. So I might not be doing something wrong then?
Orjanp
A: 

The solution was pretty simple. The problem seemed to be that creating the new page didn't generate a page change event. The solution is:

self.nb.AddPage(pnl, nm, select=True)

Adding 'select=True' will trigger a page change event. So problem solved.

Another solution is to add this line:

self.nb.SetSelection(self.nb.GetPageCount()-1)

They both do the same. Trigger a page change event to the last added page.

def new_panel(self, nm):
        pnl = wx.Panel(self)
        pnl.identifierTag = nm
        self.nb.AddPage(pnl, nm, select=True) 
        self.sizer = wx.BoxSizer()
        self.sizer.Add(self.nb, 1, wx.EXPAND)
        self.SetSizer(self.sizer)
        #self.nb.SetSelection(self.nb.GetPageCount()-1)
        pnl.SetFocus() # Have focused the last panel.
        print self.nb.GetSelection()
Orjanp