2009-03-15 7 views
1

Pourquoi 'GetSelection()' retourne-t-il l'index à la première page et non la dernière créée dans 'init' et 'new_panel'? Il renvoie l'index correct dans la méthode 'clic'.wxPython auinotebook.GetSelection() retourne l'index à la première page

La sortie doit être 0 0 1 1 2 2, mais le mien est 0 0 0 0 0 0

Exécution dernière version de python et wxpython dans 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() 

Répondre

1

La solution est assez simple. Le problème semblait être que la création de la nouvelle page ne générait pas d'événement de changement de page. La solution est:

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

Ajout 'select = True' déclenche un événement de changement de page. Donc problème résolu.

Une autre solution consiste à ajouter cette ligne:

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

Ils ont tous deux font la même chose. Déclenchez un événement de changement de page sur la dernière page ajoutée.

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

J'ai couru votre exemple et a la sortie correcte:

0 
0 
1 
1 
2 
2 

J'utilise la dernière version de Windows wxPython

+0

C'est étrange, je reçois 0 0 0 0 0 0. L'exécuter sur une plate-forme Linux. Donc je ne ferais peut-être pas quelque chose de mal alors? – Orjanp

Questions connexes