2009-03-15 10 views
1

Warum gibt 'GetSelection()' den Index auf die erste Seite zurück und nicht die letzte in 'init' und 'new_panel'? Es gibt den richtigen Index in der "Klick" -Methode zurück.wxPython ainotebook.GetSelection() gibt den Index auf die erste Seite zurück

sollte Der Ausgang 0 0 1 1 2 2 sein, aber ich ist 0 0 0 0 0 0

neueste Version von Python und wxpython in ArchLinux Laufen.

Ø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() 

Antwort

1

Die Lösung recht einfach war. Das Problem schien zu sein, dass beim Erstellen der neuen Seite kein Seitenwechselereignis generiert wurde. Die Lösung lautet:

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

Hinzufügen von 'select = True' wird eine Seite Änderungsereignis auslösen. Also Problem gelöst.

Eine andere Lösung ist es, diese Zeile hinzufügen:

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

Sie beide das gleiche tun. Löst ein Seitenwechsel-Ereignis auf die zuletzt hinzugefügte Seite aus.

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() 
0

Ich lief Ihrem Beispiel und bekam die korrekte Ausgabe:

0 
0 
1 
1 
2 
2 

ich die neueste Windows-Version von wxPython mit

+0

Das ist seltsam, ich bekomme 0 0 0 0 0 0. Laufen es auf einer Linux-Plattform. Also mache ich vielleicht etwas falsch? – Orjanp