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

Python Discussion :

Appel de la fonction d'une autre classe


Sujet :

Python

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 328
    Points : 240
    Points
    240
    Par défaut Appel de la fonction d'une autre classe
    Bonjour,

    Je ne parviens pas à trouver la réponse à cette question :

    J'aimerais mettre à jour le contenu d'un ListView d'un frame_A à partir d'un Frame_B.

    ma classe frame_A contient bien-sûr une fonction "remplitListView()" mais quand j'essaie de l'appeller à partir de mon Frame_B avec une expression du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    frame_A.remplitListView()
    , cela ne fonctionne pas.

    Je suppose que la solution est simple mais sans vous, je suis bloqué. Merci pour vos réponses !

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

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Points : 1 728
    Points
    1 728
    Par défaut
    vite fait, avec l'exemple de hier:
    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    # -*- coding:iso-8859-15 -*-
     
     
    import wx
     
    class Contact(object):
     
        def __repr__(self):
     
            return "\n".join("%s: %s" % (k, v) for k, v in self.__dict__.items()
                if not k.startswith('_'))
     
     
    class MyFrameButton(wx.MiniFrame):
     
        def __init__(self, *args, **kwargs):
     
            wx.MiniFrame.__init__(self, *args, **kwargs)
            panel = wx.Panel(self, -1)        
            button = wx.Button(panel, -1, 'mettre a jour', pos=(5,5))
            self.Bind(wx.EVT_BUTTON, self.EvtRefresh, button)
     
        def EvtRefresh(self, evt):
            parent = self.GetParent()
            parent.SetContacts(contacts)
            evt.Skip()
     
    class MyFrame(wx.Frame):
     
        def __init__(self, *args, **kwargs):
     
            wx.Frame.__init__(self, *args, **kwargs)
            self.contacts = []
            self.CreateWidgets()
            self.DoLayout()
            self.DoBinding()
            self.Populate()
     
        def CreateWidgets(self):
            self.panel = wx.Panel(self, -1)
            self.listview = wx.ListView(self.panel, -1)
            self.textctrl = wx.TextCtrl(self.panel, -1, 
                style=wx.TE_MULTILINE | wx.TE_READONLY )
     
            child_frame = MyFrameButton(self, -1, "rafraichir", pos=(100, 100), 
                size=(150, 150))
            child_frame.Show(True)
     
        def DoLayout(self):
            sizer = wx.GridBagSizer(5, 5)
            sizer.Add(self.listview, (0, 0), flag=wx.EXPAND)
            sizer.Add(self.textctrl, (0, 1), flag=wx.EXPAND)
            sizer.AddGrowableCol(0)
            sizer.AddGrowableCol(1)
            sizer.AddGrowableRow(0)
            self.panel.SetSizerAndFit(sizer)
     
        def DoBinding(self):
            self.listview.Bind(wx.EVT_LIST_ITEM_SELECTED, self.ShowContact)
     
        def SetContacts(self, contacts):
            self.contacts = contacts
            self.Populate()
     
        def Populate(self):
            contacts =  self.contacts
            self.listview.ClearAll()
            self.listview.InsertColumn(0, "les contacts")  
            for index, contact in enumerate(contacts):
                listitem = self.listview.InsertStringItem(index, "%s %s" % 
                    (contact.prenom, contact.nom))
                self.listview.SetItemData(listitem, index)
     
        def ShowContact(self, evt):
            self.textctrl.Clear()
            contact = self.contacts[evt.GetIndex()]
            self.textctrl.SetValue(str(contact))
            evt.Skip()
     
    if __name__ == "__main__":
     
        c1 = Contact()
        c1.adresse = 'dans son bain'
        c1.nom = 'lucke'
        c1.prenom = 'lucky'
     
        c2 = Contact()
        c2.adresse = 'au saloon'
        c2.telephone = "0102030405"
        c2.nom = 'dalton'
        c2.prenom = 'joe'
     
        contacts = [c1, c2]
     
        app = wx.PySimpleApp(redirect=False)
        frame = MyFrame(None, -1, "test listview")
        frame.Show(True)
    #    frame.SetContacts(contacts)
        app.MainLoop()
    la frame contenant la listview étant la fenêtre parente de la miniFrame, on récupère une référence vers celle-ci via self.GetParent, ne reste plus qu'à appeller la méthode SetContacts.
    "Etre conscient de la difficulté permet de l'éviter.."
    Lao-Tseu.

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 328
    Points : 240
    Points
    240
    Par défaut
    Merci !
    Mais je viens tout juste de trouver ce thread :

    http://www.developpez.net/forums/sho...d.php?t=304448

    qui contenait la réponse. (c'était justement toi qui donnait la réponse )

    Et pourtant, ca faisait depuis longtemps que je cherchais...

    Mais merci pour ta rapidité !!!

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

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Points : 1 728
    Points
    1 728
    Par défaut

    Bon python.
    "Etre conscient de la difficulté permet de l'éviter.."
    Lao-Tseu.

Discussions similaires

  1. Appel fonction d'une autre classe
    Par winnyzeboss1 dans le forum MFC
    Réponses: 5
    Dernier message: 12/03/2009, 09h25
  2. Réponses: 16
    Dernier message: 30/01/2008, 15h27
  3. Appel d'une fonction dans une autre classe
    Par Analfabete dans le forum wxPython
    Réponses: 3
    Dernier message: 01/10/2007, 09h45
  4. [Joomla!] appel de fonction d'une autre classe dans un autre fichier
    Par lkryss dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 5
    Dernier message: 27/07/2007, 16h55
  5. problème d'appel d'une fonction d'une autre classe
    Par kifouillou dans le forum Langage
    Réponses: 5
    Dernier message: 08/02/2007, 17h42

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