IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

wxPython Discussion :

communication entre classes


Sujet :

wxPython

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 4
    Par défaut communication entre classes
    Bonjour à tous,
    j'ai une petite question, je suis parti de l'exemple ci dessous de la classe Notebook.
    Je voudrais déclarer une liste, échangée entre toutes les classes que je pourrai modifier dans PageOne, PageTwo etc..
    Merci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    import wx
     
     
    # Some classes to use for the notebook pages.  Obviously you would
    # want to use something more meaningful for your application, these
    # are just for illustration.
     
    class PageOne(wx.Panel):
        def __init__(self, parent):
            wx.Panel.__init__(self, parent)
            t = wx.StaticText(self, -1, "This is a PageOne object", (20,20))
     
    class PageTwo(wx.Panel):
        def __init__(self, parent):
            wx.Panel.__init__(self, parent)
            t = wx.StaticText(self, -1, "This is a PageTwo object", (40,40))
     
    class PageThree(wx.Panel):
        def __init__(self, parent):
            wx.Panel.__init__(self, parent)
            t = wx.StaticText(self, -1, "This is a PageThree object", (60,60))
     
     
    class MainFrame(wx.Frame):
        def __init__(self):
            wx.Frame.__init__(self, None, title="Simple Notebook Example")
     
            # Here we create a panel and a notebook on the panel
            p = wx.Panel(self)
            nb = wx.Notebook(p)
     
            # create the page windows as children of the notebook
            page1 = PageOne(nb)
            page2 = PageTwo(nb)
            page3 = PageThree(nb)
     
            # add the pages to the notebook with the label to show on the tab
            nb.AddPage(page1, "Page 1")
            nb.AddPage(page2, "Page 2")
            nb.AddPage(page3, "Page 3")
     
            # finally, put the notebook in a sizer for the panel to manage
            # the layout
            sizer = wx.BoxSizer()
            sizer.Add(nb, 1, wx.EXPAND)
            p.SetSizer(sizer)
     
     
    if __name__ == "__main__":
        app = wx.App()
        MainFrame().Show()
        app.MainLoop()

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 4
    Par défaut
    Ok j'ai trouvé, il suffit de définir une variable en dehors des class, et ensuite insérer dans chaque class :
    global nom_de_la_variable

  3. #3
    Membre Expert Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Par défaut
    Bonjour,

    pour eviter les global, essaye ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class MainFrame(wx.Frame):
         def __init__(self):
             wx.Frame.__init__(self, None, title="Simple Notebook Example")
             self.maliste = []
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class PageOne(wx.Panel):
         def __init__(self, parent):
              wx.Panel.__init__(self, parent)
              t = wx.StaticText(self, -1, "This is a PageOne object", (20,20))
              self.parent = parent # le notebook
              self.maliste = parent.GetParent().maliste

  4. #4
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonjour pacificator,

    Il ne manque pas un niveau ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class PageOne(wx.Panel):
        def __init__(self, parent):
            wx.Panel.__init__(self, parent)
            t = wx.StaticText(self, -1, "This is a PageOne object", (20,20))
            #self.maliste = parent.GetParent().GetParent().maliste
            self.parent = parent.GetParent() # Panel
            self.maliste = self.parent.GetParent().maliste # Frame
    Ou, plus simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class PageOne(wx.Panel):
        def __init__(self, parent):
            wx.Panel.__init__(self, parent)
            t = wx.StaticText(self, -1, "This is a PageOne object", (20,20))
            self.maliste = self.GetTopLevelParent().maliste
    Si l'on souhaite mettre cela dans le wx.Frame bien sur (qu'importe la boite)

    @+

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 715
    Par défaut
    Salut,

    Je trouve dommage que les appelés aient à savoir ou a été rangé l'objet "partagé". Pourquoi ne pas lui passer cela en paramètre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class PageOne(wx.Panel):
         def __init__(self, parent):
              wx.Panel.__init__(self, parent, maliste)
              t = wx.StaticText(self, -1, "This is a PageOne object", (20,20))
              self.maliste = maliste
    Ou encore, puisque les PageX ont des attributs communs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class PageX(wx.Panel):
         def __init__(self, parent):
              wx.Panel.__init__(self, parent, maliste)
              self.maliste = maliste
     
    class PageOne(PageX):
         def __init__(self, parent):
              PageX.__init__(self, parent, maliste)
              t = wx.StaticText(self, -1, "This is a PageOne object", (20,20)
    Je préfère plutôt:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class PageX(wx.Panel):
         def __init__(self, parent):
              wx.Panel.__init__(self, parent, maliste_factory)
              self.maliste = maliste_factory()
    puisque dans ce cas, on passe un callable ouvert à singleton, lambda, ... très flexible.

    Cordialement,
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 4
    Par défaut
    merci pour vos réponses, je débute le python et donc je n'ai pas tous les bons réflexes pour écrire un programme bien construit.
    Si par ailleurs vous connaissez une page web / un bouquin qui donne des conseils pour bien écrire un programme wxPython/Python je suis preneur.

    Encore merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Communication entre classes
    Par sunshine33 dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 03/02/2010, 21h04
  2. communication entre classes
    Par milomar dans le forum C++
    Réponses: 6
    Dernier message: 02/03/2008, 11h59
  3. Communication entre classes
    Par matteli dans le forum C++
    Réponses: 6
    Dernier message: 25/02/2008, 11h45
  4. Problème de communication entre classe
    Par FabaCoeur dans le forum Général Java
    Réponses: 4
    Dernier message: 22/01/2008, 13h50
  5. [c#] probléme de communication entre classe
    Par OpenGG dans le forum C#
    Réponses: 1
    Dernier message: 24/09/2006, 21h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo