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

  FORUM HardWare.fr
  Programmation
  Python

  [Python] Checkbox et condition - Récupération de variable

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Python] Checkbox et condition - Récupération de variable

n°2248731
phosphoryl​ase
Posté le 19-01-2015 à 13:09:01  profilanswer
 

Bonjour,
 
J'ai une liste sur tkinter.  
L'utilisateur choisit un élément de la liste.  
Le clique appel une "récupération" appelé CurSelect de ce que contient l'élément sélectionné.  
Selon le choix (condition en if) je dois remplir une variable k_i (variable associé à la i-ème liste de ma fenêtre).  
Là je fais simple. Juste une liste. Donc je dois remplir k1.  
 
Donc k1 prend des valeurs arbitraires que je lui fixe selon ce que l'utilisateur clique.  
Je demande un print(k1) à la fin juste pour être sûr que ça a marché et que j'ai bien ce qu'il faut dans k1.  
 
 

Citation :


from tkinter import *  
 
fenetre1 = Tk()
 
 
def CurSelet(evt):
    value=str(liste1.get(liste1.curselection()))
    if value==A:
       k1=0,8
    if value==B:
       k1=0,9
    if value==C:
       k1=1.1
    if value==D:
       k1=1.0
     
print(k1)
 
 
label = Label(fenetre1, text="Choisissez" )
label.pack()
liste1 = Listbox(fenetre1,width=80, height=5)
liste1.insert(1, "A" )
liste1.insert(2, "B" )
liste1.insert(3, "C" )
liste1.insert(4, "D" )
liste1.bind('<<ListboxSelect>>',CurSelet)


 
 
Il me renvoie toujours le message d'erreur suivant :
 

Citation :

NameError: name 'A' is not defined


(il me donne ça dans le cas où j'ai juste fait un seul IF avec A, mais j'ai mis tous les autres pour expliquer ou je voulais en venir).  
 
Je ne comprends pas en quoi elles ne sont pas définies. Que puis-je faire ? :o
 
Enfin. J'aimerais comprendre un truc. Dans le cas où ça marcherait, je le garde combien de temps k1 ?  
 
Vais je pouvoir appeler k1 "après" cette liste comme paramètre d'entrée d'une fonction ?  
 
 
Merci d'avance :o

mood
Publicité
Posté le 19-01-2015 à 13:09:01  profilanswer
 

n°2248747
Rontgen
Posté le 19-01-2015 à 16:22:43  profilanswer
 

Compare value à "A" (chaine de caractère contenant seulement le caractère 'A') au lieu de A  :o
 
Pour la variable k1, elle ne sera définie que dans ta fonction CurSelet (donc au passage, si tu veux l'afficher, il faut que tu indentes ton print(k1))


Message édité par Rontgen le 19-01-2015 à 16:26:47
n°2248751
aybiwan
lemonade death
Posté le 19-01-2015 à 16:42:46  profilanswer
 

pinaillages divers, rontgen a resolu ton probleme :o
 
utilise fixed plutot que quote pour du code
 
fais gaffe à tes points et virgules quand tu definis k1, c'est pas la meme chose.
tu peux utiliser elif au lieu de if à la suite, et tu pourrais meme utiliser un dictionary pour passer de la lettre au nombre correspondant.
 
et chez moi la liste ne s'affiche que si tu finis avec un

liste1.pack()


---------------
I like work: it fascinates me. I can sit and look at it for hours.
n°2248762
phosphoryl​ase
Posté le 19-01-2015 à 18:07:05  profilanswer
 

Merci les amis du taupin :o  
 
J'avais trouvé le problème entre temps mais bon rien de  tel qu'une confirmation.  
 
 
Comment je fais pour sortir k1 avec la valeur qui va bien (c'est à dire celle assignée par le if) de la fonction et aller la faire jouer ailleurs ?  
 

n°2248765
Rontgen
Posté le 19-01-2015 à 18:18:23  profilanswer
 

Normalement il suffit d'un  

return k1


à la fin de ta fonction CurSelet pour que la fonction retourne la valeur de k1
 
Le truc un peu particulier là c'est que CurSelet est une fonction déclenchée par un événement dans ta liste donc c'est pas toi qui gère explicitement l'appel à cette fonction et donc sa valeur de retour.
Je ne sais pas exactement ce que tu veux faire mais tu as deux possibilités:
- soit tu rajoutes ton code qui utilise k1 à la fin de la fonction CurSelet
- soit tu as vraiment besoin de cette variable ailleurs et du coup il faut peut-être utiliser une variable globale, cf http://stackoverflow.com/questions [...] eated-them pour la syntaxe


Message édité par Rontgen le 19-01-2015 à 18:19:36
n°2248766
phosphoryl​ase
Posté le 19-01-2015 à 18:31:48  profilanswer
 

Merci de ta réponse :o
Laisse moi t'expliquer alors plus en détail. Tu pourras peut être plus m'aiguiller.

 


Liste 1 => Clique de l'user => k1 =
Liste 2 => Clique de l'user => k2 =
Liste 3 => Clique de l'user => k3 =

 

Il faut que je récupère le k final (une fois que tout est bien cliqué) associé à chaque liste et faire une simple multiplication entre eux.

 

K=k1*k2*k3* ... k

 



Message édité par phosphorylase le 19-01-2015 à 18:31:57
n°2248767
Rontgen
Posté le 19-01-2015 à 19:05:18  profilanswer
 

Probablement le plus facile serait de:
-  faire une variable globale qui est un tableau de taille n, qui va contenir chacun de tes (k_i)_i=1..n ainsi qu'une autre variable globale qui va contenir leur produit
- dans CurSelet, au lieu de ton k1, tu changes la valeur de k[i]
[  
D'ailleurs ce serait bien de reussir a choper quelle liste a déclenché l'événement à l'intérieur de CurSelet, comme ca tu peux la reutiliser pour toutes les listes et tu n'as pas à la dupliquer
Une autre facon intermédiraire serait de passer l'indice en argument donc CurSelet(evt, i) et de definir  
CurSelet1(evt) comme CurSelet(evt,1),  
CurSelet2(evt) comme CurSelet(evt,2)
et d'assigner CurSelet1 a la liste 1 , etc
]
- enfin, tu mets à jour la valeur de k comme le produit des (k_i)

Message cité 1 fois
Message édité par Rontgen le 19-01-2015 à 19:09:08
n°2248769
phosphoryl​ase
Posté le 19-01-2015 à 19:16:14  profilanswer
 

Je vais m'y atteler. Merci. :o  
Mais déjà une première question.  
Mais pourquoi faut il une variable globale pour le produit ?  
Je comprends pas la nécessite de "global"  
Une Var=Produit des termes du vecteur contenant les k_i doit bien exister.

n°2248770
aybiwan
lemonade death
Posté le 19-01-2015 à 19:27:23  profilanswer
 

Rontgen a écrit :

Probablement le plus facile serait de:
-  faire une variable globale qui est un tableau de taille n, qui va contenir chacun de tes (k_i)_i=1..n ainsi qu'une autre variable globale qui va contenir leur produit
- dans CurSelet, au lieu de ton k1, tu changes la valeur de k[i]


+1
 

Rontgen a écrit :

Une autre facon intermédiraire serait de passer l'indice en argument donc CurSelet(evt, i) et de definir  
CurSelet1(evt) comme CurSelet(evt,1),  
CurSelet2(evt) comme CurSelet(evt,2)
et d'assigner CurSelet1 a la liste 1 , etc


lambda evt: CurSelect(evt, 1)
lambda evt: CurSelect(evt, 2)
etc
[:turbocat:1]
 

phosphorylase a écrit :

Mais pourquoi faut il une variable globale pour le produit ?  
Je comprends pas la nécessite de "global"  
Une Var=Produit des termes du vecteur contenant les k_i doit bien exister.


oui, si tu t'en sers qu'à un endroit, le produit n'a pas besoin d'etre global.


---------------
I like work: it fascinates me. I can sit and look at it for hours.
n°2249118
phosphoryl​ase
Posté le 22-01-2015 à 23:10:48  profilanswer
 

Nouveau jeu :)  
 
Il faut que je scroll ma fenêtre principale parce que widget sous tkinter s'empile mais j'ai plus de place :o
Il me faut absolument une scroll bar mais j'arrive pas à adapter un code :/


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

  [Python] Checkbox et condition - Récupération de variable

 

Sujets relatifs
Récupération de données passées via Javascript[réglé] [SQL] Jointure et variable du meme nom
variable d'une page à une autre avec $_session ?projet de programmation (ISN) (python 3.4)
Problème avec tuple sur Python 3.4.1Envoi de mail depuis un usf avec corp du mail variable
condition infini if else...[python] Generer image à partir de données texte
Lire un packet DNS (un champ de long. variable) dans une structure ?besoin d'Aide : Python our programmer un mot de passe
Plus de sujets relatifs à : [Python] Checkbox et condition - Récupération de variable


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