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 :

Non interprétation des variables


Sujet :

wxPython

  1. #1
    Membre expérimenté
    Inscrit en
    Octobre 2005
    Messages
    344
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 344
    Par défaut Non interprétation des variables
    J'ai un GUI en wxpython, mais le problème que j'ai se situe plutôt dans la partie python.
    Le GUI se compose de 6 images StaticBitmap que j'appelle button1...button6. Je voudrais, à l'aide des flêches du clavier, me déplacer sur ces boutons.A chaque fois que je suis sur un bouton, il change d'image. En fait, j'utilise la fonction:
    buttonoff.SetBitmap(imageoff) pour le faire changer d'image. J'initialise la variable self.pos à 0 avant d'appeler la fonction par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self.Bind(wx.EVT_CHAR, self.OnOffButton)
    Pour les déplacements, j'ai écrit la fonction:
    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
        def OnOffButton(self, event): 
            image_off=['image1', 'image2', 'image3', 'image4', 'image5', 'image6'] 
            imageleave=image_off[self.pos] 
            buttonleave='button' + str(self.pos + 1) 
            key = event.GetKeyCode() 
            if key in (wx.WXK_LEFT, wx.WXK_RIGHT, wx.WXK_UP, wx.WXK_DOWN): 
                if key == wx.WXK_LEFT: 
                    print "LEFT" 
                    if self.pos > 2: 
                        self.pos = self.pos - 3 
                elif key == wx.WXK_RIGHT: 
                    print "RIGHT" 
                    if self.pos < 3: 
                        self.pos = self.pos + 3 
                elif key == wx.WXK_UP: 
                    print "UP" 
                    if self.pos == 3: 
                        self.pos = self.pos 
                    elif self.pos == 0: 
                        self.pos = self.pos 
                    else: 
                        self.pos = self.pos - 1 
                elif key == wx.WXK_DOWN: 
                    print "DOWN" 
                    if self.pos == 2: 
                        self.pos = self.pos 
                    elif self.pos == 5: 
                        self.pos = self.pos 
                    else: 
                        self.pos = self.pos + 1 
            if key == wx.WXK_ESCAPE: 
                self.OnTimeToClose() 
            buttonenter='button' + str(self.pos + 1) 
            imageenter=image_off[self.pos] + '_on' 
            buttonleave.SetBitmap(imageleave) 
            buttonenter.SetBitmap(imageenter) 
            buttonleave.Refresh() 
            buttonleave.Update() 
            buttonenter.Refresh() 
            buttonenter.Update() 
            event.Skip() 
            return

    mais quand je joue le script, j'ai le message d'erreur:

    AttributeError: 'str' object has no attribute 'SetBitmap'

    C'est comme s'il n'évaluait pas les variables buttonleave, etc ....
    Quelqu'un aurait une idée ???

  2. #2
    Expert confirmé
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Par défaut
    C'est normal.
    Quand tu fais buttonleave='button' + str(self.pos + 1) , buttonleave est un string.
    Si tu veux qu'il représente ton bouton, il faut utiliser eval
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    buttonleave=eval('button' + str(self.pos + 1))

  3. #3
    Membre expérimenté
    Inscrit en
    Octobre 2005
    Messages
    344
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 344
    Par défaut
    GENIAL !!!!! Ca marche nikel !!
    Merci Guigui_

  4. #4
    Membre expérimenté
    Inscrit en
    Octobre 2005
    Messages
    344
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 344
    Par défaut
    J'avais posé la même question sur un autre forum où on m'a vivement déconseillé d'utiliser "eval" ... Pour des raisons de performance ... Mais comme c'est juste pour évaluer la valeur d'une variable, je ne vois pas (en ayant essayé et en suivant les ressources systèmes) de différence entre avec et sans eval (que ce soit en performances systèmes comme en temps de traitement)... Je garde donc cette solution qui allège pas mal mon code.
    Encore une fois merci.

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

Discussions similaires

  1. Désactiver l'interprétation des variables "cvs"
    Par proDZ dans le forum Langage
    Réponses: 0
    Dernier message: 09/11/2009, 09h40
  2. interprétation des variables dans une chaîne
    Par marts dans le forum Langage
    Réponses: 2
    Dernier message: 31/01/2009, 20h01
  3. interprétation des variables
    Par carlino dans le forum Scripts/Batch
    Réponses: 0
    Dernier message: 09/07/2008, 09h20
  4. [FORMS10g] Interprétation des variables globales
    Par pompidouwa dans le forum Forms
    Réponses: 3
    Dernier message: 09/01/2008, 11h28
  5. [Sécurité] Non persistence des variables session ?
    Par Christophe Charron dans le forum Langage
    Réponses: 9
    Dernier message: 28/02/2006, 22h05

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