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

  FORUM HardWare.fr
  Programmation
  Python

  clic et logique booléenne avec tkinter

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

clic et logique booléenne avec tkinter

n°2222003
giny28
Posté le 10-03-2014 à 15:40:09  profilanswer
 

Bonjour,
 
En ce moment , j'utilise tkinter et je voudrais créer un rectangle en faisant create_rectangle(...,options) .Mais je bloque sur un exercice qui nous demande : que lors du premier clic , une fonction qui dessine le rectangle doit retourner un rectangle de couleur rouge, et lors du 2ème clic , un rectangle de couleur verte , ensuite au prochain clic , le rectangle rouge doit étre et aprés vert ....(et ainsi de suite ) .
J'ai pensé à la logigue booléenne , en initialisation une variable couleur , et l'incrémenter par la suite , en utilisant les conditions if , mais çà ne marche pas , je ne saisis pas le fonctionnement de tkinter et l'ampleur de l'argument event qui signifie évènement (pourtant , j'ai fait des heures de recherches)
 
Voilà mon bout de code , et petite précision (il y'a une fonction manager() qui regroupe la position du clic et la fonction dessiner() , mais le noyau dur  :pt1cable: c'est la fonction dessiner()) :
 

Code :
  1. >>> couleur = 0
  2. >>> def dessiner(event):
  3.      global couleur
  4.      if couleur is 0 : c.create_rectangle(x - d, y - d, x + d, y + d, fill='red', outline="" )
  5. ...          x, y = event.x, event.y
  6. ...          c = event.widget
  7. ...          d = 20             # diagonale
  8. ...          couleur = 1
  9.              if couleur is not 0 :c.create_rectangle(x - d, y - d, x + d, y + d, fill='green', outline="" )
  10.              x, y = event.x, event.y
  11.      c = event.widget
  12.      d = 20


 
En quoi mon raisonnement est faux ? J'ai un autre code concernant la parité en fonction d'un compteur des rectangles , mais c'est encore pire  
 
 
Une idée consisterait à retirer par le biais de l'index d'une genre le liste la couleur , en définissant à la base , un variable avec les deux couleurs :
 
COLORS = ('red', 'green')
 
def dessine(event):
    global couleur
    c.create_rectangle(x - d, y - d, x + d, y + d, fill=COLORS[couleur], outline="" )
 
Mais le shell dit que la variable couleur n'est pas définie , voilà le message que j'obtiens :
 
            Exception in Tkinter callback  
 
Traceback (most recent call last):
  File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1473, in __call__
    return self.func(*args)
  File "<stdin>", line 3, in manager
  File "<stdin>", line 6, in dessine
 
Pourtant , lorsque j'écris aprés que couleur = 0 ou couleur = 1 , j'obtiens un carré de couleur rouge et aprés verte(çà fonctionne comme les index des listes avec COLORS[couleur]) mais justement ce n'est pas juste puisque c'est le clic de la souris qui doit déclencher l'action et non mon écriture sur le shell  :fou: ...
 
 
_J'ai fait un autre test mais sans succés :
 

Code :
  1. >>> var = True
  2. >>> var
  3. True
  4. >>> var = not var
  5. >>> var
  6. False
  7. >>> var = not var
  8. >>> var
  9. True
  10. >>> def dessine(event) :
  11. ...     c = event.widget
  12. ...     d = 20
  13. ...     x, y = event.x, event.y
  14. ...     if green == True :c.create_rectangle(x - d, y - d, x + d, y + d, fill="green", outline="" )
  15. ...     else : c.create_rectangle(x - d, y - d, x + d, y + d, fill = 'red', outline="" )


 

mood
Publicité
Posté le 10-03-2014 à 15:40:09  profilanswer
 

n°2222030
masklinn
í dag viðrar vel til loftárása
Posté le 10-03-2014 à 18:49:34  profilanswer
 

1. L'indentation de ton code est toute foireuse, c'est incompréhensible
2. Le message d'erreur a pas l'air complet (il y a au moins une ligne qui manque)
3. dans le snippet 2, couleur n'est pas défini (global couleur ça définit rien du tout, ca dit juste que la fonction doit utiliser la variable globale en question, si elle n'existe pas ça va se vautrer)
4. dans le snippet 3, green n'est défini nulle part, je ne vois pas pourquoi ça fonctionnerait
5. avoir du code qui tourne c'est plus pratique pour tester/aider
6. itertools.cycle
7. utiliser code=python ça sort une meilleure coloration:

Code :
  1. def dessine(event) :
  2.    c = event.widget
  3.    d = 20
  4.    x, y = event.x, event.y
  5.    if green:
  6.        c.create_rectangle(x - d, y - d, x + d, y + d, fill="green", outline="" )
  7.    else:
  8.        c.create_rectangle(x - d, y - d, x + d, y + d, fill='red', outline="" )


Message édité par masklinn le 10-03-2014 à 19:07:45

---------------
I've never understood the compulsion to use Web technologies minus the Web's security and deployment models. It seems a bit like throwing the orange away and eating the peel. — @ justinschuh‬

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

  clic et logique booléenne avec tkinter

 

Sujets relatifs
Delphi - le clic de la souris fait des siennesAnnuler effet clic gauche sur un événement mousedown
Problème fenêtre surnuméraire Tkinter [RESOLU]algo pour suite logique ?
Passer d'une JFrame à une autre au clic boutonimplémenter une règle logique
Test de logique en cTest de suite logique en c
[Résolu] Problème de bordure rémanente intempestive après clic sur imgD7. Un ListBox de Jedi ne répond pas au clic.
Plus de sujets relatifs à : clic et logique booléenne avec tkinter


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