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 :

Problème boucle while et evenement


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 31
    Points : 30
    Points
    30
    Par défaut Problème boucle while et evenement
    Bonjour,

    voila, j'ai une boucle while qui me permet de créer et binder dynamiquement des boutons :
    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
     
        def ma_fonction(self):
            global tx
            global dv,dv2,dv_final,lst
            lst={}        
            loc=8
            tx=1
            bt=1
     
            while tx<=nb_bt:
                dv=str(occ[tx])
                dv2=str(occ[tx])
                dv2= wx.Button(self, tx, dv, wx.Point(loc,50))
                self.Bind(wx.EVT_BUTTON, self.listDir, dv2)
                tx=tx+1
                loc=loc+80
    et une fonction qui gère l'évenement en rapport :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    def listDir(self, e):
            dv_final='dir '+dv
            print '\ndvfinal=',dv_final
            ......
    Si j'éxécute ce code, la boucle crée bien 2 boutons avec en label C: et D:
    puisque que c'est ce que j'ai dans ma config, mais quand je clique sur C:, la fonction listDir() ne prend en compte la valeur de dv qu'à sa dernière itération.
    Cela semble logique puisque à l'execution de listDir, le while est déjà terminé.

    Mais si je rajoute dv en paramètre comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    self.Bind(wx.EVT_BUTTON, self.listDir(dv), dv2)
    et que je modifie listDir de la sorte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    def listDir(self, v):
            dv_final='dir '+v
            print '\ndvfinal=',dv_final
            ....
    et bien listDir, prend la bonne valeur, à savoir C: pour le premier bouton cliqué et D: pour le deuxième, mais parcontre, est lancée PENDANT que le while s'exécute, ce que je suis loin de comprendre...

    Quelqu'un à une idée?

    merci d'avance,
    rc

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 36
    Points : 37
    Points
    37
    Par défaut
    je ne suis pas une experte en ce qui concerne le bind, mais essaies de faire ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self.Bind(wx.EVT_BUTTON, lambda : self.listDir(dv), dv2)
    Le fait qu'il s'exécute dès le début est dû au fait que tu as mis les parenthèses et python exécute toute fonction ayant des ().
    En tout cas, c le cas pour moi.

    voilà, en espérant avoir été claire.
    bon courage

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 31
    Points : 30
    Points
    30
    Par défaut
    Bonjour,

    et merci d'avoir répondu. Voila j'ai donc essayé la commande 'lambda' comme-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    lambda x : self.listDir(dv)
    si je ne rajoute pas le x, le compileur me dit que lambda ne prend aucun paramètre alors que je lui en donne un.

    Donc, à l'exécution, le bind ne s'exécute plus tant que je n'ai pas cliqué sur un des boutons dynamiquement crées, mais parcontre, listDir ne prend en compte que la dernière valeur de la boucle.

    J'ai par ailleurs rajouté le paramètre 'name' dans la creation des boutons,
    que je récupère dans listDir() par GetName(), mais encore une fois, listDir() prend le nom du dernier bouton seulement... .

    La j'ai plus d'idée!

Discussions similaires

  1. problème boucle while
    Par Stephub dans le forum Débuter
    Réponses: 6
    Dernier message: 20/01/2009, 23h31
  2. Problème boucle while
    Par Peedro dans le forum Langage
    Réponses: 4
    Dernier message: 07/10/2008, 14h09
  3. Problème boucle while
    Par chuko dans le forum C
    Réponses: 7
    Dernier message: 04/07/2008, 16h12
  4. Problème boucle while
    Par fred33 dans le forum Langage
    Réponses: 2
    Dernier message: 23/05/2008, 19h16
  5. [MySQL] Problème boucle WHILE
    Par Adlack dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/02/2007, 19h30

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