2010-08-25 9 views
2

Je me demande comment on pourrait obtenir une variable d'une page à l'autre à partir d'un cahier wx. Je pense qu'il devrait y avoir un moyen de référencer une variable si je connais le nom de la variable et l'identifiant de la page. Par exemple, si je devais le code suivant, comment pourrais-je faire référence à la variable x du panneau y et vice versaComment puis-je obtenir des variables d'une page de cahier wx à une autre page de cahier wx?

import wx 

class PanelX(wx.Panel): 
    def __init__(self, parent): 
     wx.Panel.__init__(self, parent) 
     x = 3 

class PanelY(wx.Panel): 

    def __init__(self, parent): 
     wx.Panel.__init__(self, parent) 
     y=4 

class MainFrame(wx.Frame): 
    def __init__(self): 
     wx.Frame.__init__(self, None, title="Main Frame", size = (500,450)) 

     p = wx.Panel(self) 
     nb = wx.Notebook(p) 

     nb.AddPage(PanelX(nb), "Panel X") 
     nb.AddPage(PanelY(nb), "Panel Y") 


     sizer = wx.BoxSizer() 
     sizer.Add(nb, 1, wx.EXPAND) 
     p.SetSizer(sizer) 


if __name__ == "__main__": 
    app = wx.App() 
    MainFrame().Show() 
    app.MainLoop() 

Répondre

4

Les variables que vous créez dans vos panneaux ne sont pas « sauvé » dans la classe - ils sont une variable locale utilisée dans le constructeur, et rejetée de la mémoire dès que cette méthode est exécutée. Vous devrez créer vos variables avec "self" devant elles - self.x = 3 Cela créera des "variables d'instance" - variables qui ont des valeurs différentes selon l'instance de classe à laquelle elles appartiennent.

Vous pouvez obtenir une page à partir d'un ordinateur portable en utilisant sa méthode GetPage. Voici votre exemple modifié:

import wx 

class PanelX(wx.Panel): 
    def __init__(self, parent): 
     wx.Panel.__init__(self, parent) 
     self.x = 3 

class PanelY(wx.Panel): 

    def __init__(self, parent): 
     wx.Panel.__init__(self, parent) 
     self.y = 4 

class MainFrame(wx.Frame): 
    def __init__(self): 
     wx.Frame.__init__(self, None, title="Main Frame", size = (500,450)) 

     p = wx.Panel(self) 
     nb = wx.Notebook(p) 

     nb.AddPage(PanelX(nb), "Panel X") 
     nb.AddPage(PanelY(nb), "Panel Y") 


     sizer = wx.BoxSizer() 
     sizer.Add(nb, 1, wx.EXPAND) 
     p.SetSizer(sizer) 

     page = nb.GetPage(0) 
     print "PanelX's X value is %s" % page.x 

     page = nb.GetPage(1) 
     print "PanelY's Y value is %s" % page.y  


if __name__ == "__main__": 
    app = wx.App() 
    MainFrame().Show() 
    app.MainLoop() 
+0

+1 Merci, la fonction GetPage était le lien manquant. Merci d'avoir attrapé les variables locales. C'était sur la surveillance. – Richard

+2

pas de problème - je n'étais pas sûr de savoir comment décrire les variables locales par rapport à l'instance, et je suis assez nul à expliquer ces choses :) –

+0

Y at-il une alternative à nb.GetPage qui utilise le nom de la chaîne de la page, ou un autre identifiant en plus d'un entier arbitraire? –