Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1642 connectés 

  FORUM HardWare.fr
  Programmation
  Python

  Eval de variables dans une fonction

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Eval de variables dans une fonction

n°1556038
usf70
Posté le 06-05-2007 à 16:44:48  profilanswer
 

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 :
  1. self.Bind(wx.EVT_CHAR, self.OnOffButton)


Pour les déplacements, j'ai écrit la fonction:  

Code :
  1. def OnOffButton(self, event):
  2.         image_off=['image1', 'image2', 'image3', 'image4', 'image5', 'image6']
  3.         imageleave=image_off[self.pos]
  4.         buttonleave='button' + str(self.pos + 1)
  5.         key = event.GetKeyCode()
  6.         if key in (wx.WXK_LEFT, wx.WXK_RIGHT, wx.WXK_UP, wx.WXK_DOWN):
  7.             if key == wx.WXK_LEFT:
  8.                 print "LEFT"
  9.                 if self.pos > 2:
  10.                     self.pos = self.pos - 3
  11.             elif key == wx.WXK_RIGHT:
  12.                 print "RIGHT"
  13.                 if self.pos < 3:
  14.                     self.pos = self.pos + 3
  15.             elif key == wx.WXK_UP:
  16.                 print "UP"
  17.                 if self.pos == 3:
  18.                     self.pos = self.pos
  19.                 elif self.pos == 0:
  20.                     self.pos = self.pos
  21.                 else:
  22.                     self.pos = self.pos - 1
  23.             elif key == wx.WXK_DOWN:
  24.                 print "DOWN"
  25.                 if self.pos == 2:
  26.                     self.pos = self.pos
  27.                 elif self.pos == 5:
  28.                     self.pos = self.pos
  29.                 else:
  30.                     self.pos = self.pos + 1
  31.         if key == wx.WXK_ESCAPE:
  32.             self.OnTimeToClose()
  33.         buttonenter='button' + str(self.pos + 1)
  34.         imageenter=image_off[self.pos] + '_on'
  35.         buttonleave.SetBitmap(imageleave)
  36.         buttonenter.SetBitmap(imageenter)
  37.         buttonleave.Refresh()
  38.         buttonleave.Update()
  39.         buttonenter.Refresh()
  40.         buttonenter.Update()
  41.         event.Skip()
  42.         return


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

Citation :

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 ???


Message édité par usf70 le 06-05-2007 à 16:57:45
mood
Publicité
Posté le 06-05-2007 à 16:44:48  profilanswer
 

n°1556172
Taz
bisounours-codeur
Posté le 06-05-2007 à 20:27:43  profilanswer
 

forcément c'est une str ton truc ... utilise une list et jète ta numérotation de noms de variables.

n°1556262
usf70
Posté le 07-05-2007 à 00:48:12  profilanswer
 

Comment ça une list ?? Pourrais-tu m'en dire plus ?


Message édité par usf70 le 07-05-2007 à 00:48:34
n°1556380
usf70
Posté le 07-05-2007 à 10:44:06  profilanswer
 

Une solution à mon problème:

Code :
  1. buttonleave=eval('button' + str(self.pos + 1))


en remplaçant mes variables avec des eval, ça marche ... Par contre, je serai interessé par ta solution avec les list Taz si tu pouvais m'en dire plus ....

Message cité 1 fois
Message édité par usf70 le 07-05-2007 à 10:44:29
n°1556384
Taz
bisounours-codeur
Posté le 07-05-2007 à 10:48:30  profilanswer
 

en 5 ans de python, je n'ai JAMAIS utilisé eval.  
 
Tes boutons, ils sont ou ? bah tu les mets dans une list et voilà

n°1556394
masklinn
í dag viðrar vel til loftárása
Posté le 07-05-2007 à 10:53:47  profilanswer
 

usf70 a écrit :

Une solution à mon problème:

Code :
  1. buttonleave=eval('button' + str(self.pos + 1))


en remplaçant mes variables avec des eval, ça marche ... Par contre, je serai interessé par ta solution avec les list Taz si tu pouvais m'en dire plus ....


NE JAMAIS UTILISER EVAL
 
Je ne connais aucun langage ou l'utilisation explicite d' `eval` soit nécessaire, à part peut-être PHP, et encore.
 

  • Eval a des performances pitoyables, parce qu'il doit refaire tout un parsing de l'expression au runtime au lieu de le faire au parsing initial du fichier
  • Eval peut avoir des effets de bord critiques
  • Eval peut être fait sur des données venant -- même de façon détournée -- de l'utilisateur, et constitue en ce cas une faille de sécurité majeure.


Et pour la (parfaite) solution que propose Taz, suffit d'aller lire la doc... http://docs.python.org/tut/node5.h [...] 0000000000


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1556662
usf70
Posté le 07-05-2007 à 18:45:34  profilanswer
 

OK, Merci de vos conseils ... je vais regarder ça de plus près...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Python

  Eval de variables dans une fonction

 

Sujets relatifs
[Résolu] Variables dynamiques ?Pointeur sur fonction
problème de requete en fonction de l'url de la pagefonction onload en javascript avec du xml
Problème avec la fonction avg en double jointure[Javascript] Rendre une fonction compatible avec Firefox
Appeler une fonction python dans un contexte javaTraitement d'une fonction Ping avec une liste de PC ds un fichier exl
[Excel-VBA]Fonction IF je pète un cable[Urgent] Diaporama en javascript (Problème de chargement)
Plus de sujets relatifs à : Eval de variables dans une fonction


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR